Ith моего взгляда я связывающиеся с идентификатором (в моем случае, если СК) на виде-модели, у меня есть вычисленное значение, которое выполняет Lookups, как показано ниже (fiddle link here):Работы с нокаутом радио поисков эффективны
Посмотреть
<div data-bind="foreach: server">
<div>
<input type="radio" name="server" data-bind="attr: {value: sku}, checked: $root.selectedServer" />
<span data-bind="text: name"></span>
</div>
</div>
<p data-bind="text: selectedServer"></p>
<p data-bind="text: description"></p>
View-модель
var serverOptions = [{
name: "One",
sku: 1000,
specification: "yes",
price: 100
}, {
name: "Two",
sku: 1001,
specification: "hello",
price: 200
}, {
name: "Three",
sku: 1002,
specification: "wow",
price: 300
}];
viewModel = function() {
var self = this;
self.server = serverOptions;
self.selectedServer = ko.observable();
self.description = ko.computed(function() {
var selectedSku = this.selectedServer();
// needs to be checked as on viewmodel creation the computed function will be called
// and selectedServer will not be selected
if(typeof selectedSku == "undefined")
return;
var found = ko.utils.arrayFirst(serverOptions, function (item) {
return item.sku == selectedSku;
}, this);
var textDescription = found.name + " - " + found.specification + " (" + found.price + ")";
return textDescription;
}, this);
return self;
};
ko.applyBindings(new viewModel());
У меня будет довольно много этих поисков из выбора радиокнопки, и, как можно видеть, насколько я понимаю, проверка ошибок должна выполняться на каждом из них, поскольку изначально переключатель, на котором зависит вычисляемое значение, будет неопределенным в представлении -модель - это делает код модели представления довольно «громоздким».
Является ли приведенный выше код наиболее эффективным способом, могут быть отложены рассчитанные триггеры привязки до создания модели viewmodel или имеются ли какие-либо другие функции утилиты нокаута (или повторного факторинга), которые могли бы сделать очиститель модели обзора?
Мои навыки работы с javascript по-прежнему медленно собираются вместе в качестве кругового курса из многих лет C#, что совсем другое, поэтому оцените любые указатели.
Вы попробовали 'subscribe'? Это похоже на 'ko.computed', но он не срабатывает до тех пор, пока не будет инициализирован viewModel. Это описано внизу [этой страницы] (http://knockoutjs.com/documentation/observables.html). Это то, что вы ищете? – woz