0
第i我的视图我绑定到的ID(在我的情况下的SKU)上的视图模型处理,我有执行查找如下(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>
视图模型
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());
我会从单选按钮选择中看到相当多的这些查找,并且据我所知,需要对每个查询执行错误检查,因为最初计算值所依赖的单选按钮将在视图上未定义 - 模型创建 - 这使得视图模型代码非常“庞大”。
上述代码是最有效的方法吗?是否可以将计算绑定触发器推迟到构建视图模型,或者是否存在可以使视图模型更清洁的任何其他挖空效用函数(或重新分解)?
我的JavaScript技能仍然慢慢地聚集在一起,从C#年代的崩溃过程看,它非常不同,因此非常欣赏任何指针。
你试过'订阅'吗?它就像'ko.computed',但它不会触发,直到viewModel初始化。它在[本页]的底部进行了描述(http://knockoutjs.com/documentation/observables.html)。那是你在找什么? – woz