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