我看這個: http://knockoutjs.com/documentation/extenders.html如何添加擴展到現有的可觀測在淘汰賽
的問題是,我使用fromJs創建我的視圖模型,所以我observerables已經存在。我想我可以做到以下幾點添加一個擴展:
var data = result.Data;
if (!window.vmRealTimeActivity) {
window.vmRealTimeActivity = ko.mapping.fromJS(data, mappingKeys);
ko.applyBindings(vmRealTimeActivity, $('#second-btm')[0]);
} else {
ko.mapping.fromJS(data, vmRealTimeActivity);
}
vmRealTimeActivity.MyExistingObservable.extend({ numeric: null });
vmRealTimeActivity.MyExistingObservable(9999); // doesn't call numeric extender
我的擴展被調用首次安裝有增,但試圖改變後的值不是。
我讀另一SO貼子,說.extend()創建一個新的observerable所以你必須要做到這一點,但是這並不能正常工作或:
vmRealTimeActivity.MyExistingObservable = vmRealTimeActivity.MyExistingObservable.extend({ numeric: null });
除了不能打電話給我格式化程序第二次,值開始回來NaN。
如何將extender以正確的方式附加到現有的observable?
謝謝!這將如何適用於可觀察數組?以前我是這樣做的:$ .each(vmRealTimeActivity.Goals(),function(i,e){e.Count.extend({numeric:null}); }); >>所以我可以擴展自動生成的Goals集合的Count屬性。我試過類似這樣的東西:create:function(options){var 0; 0; 0;}; var newArray = ko.observableArray(options.data); >>根據你的代碼,但沒有運氣。 – KingOfHypocrites
[只是爲了說明如何用可觀察的數組來實現這個功能](http://jsfiddle.net/KrP9D/)。這裏有很多改進的餘地,但我只是想舉個簡單的例子。而不是在'創建'回調中返回新的觀察值,你也可以返回一個新的視圖模型。只需看一下映射插件的[documentation](http://knockoutjs.com/documentation/plugins-mapping.html),該部分稱爲**使用「創建」定製對象構造** –
謝謝,我們來看看。這很具有諷刺意味,因爲之前我手動創建了視圖模型,並且我轉而使用fromJs,這似乎比它的價值更多的工作。大聲笑 – KingOfHypocrites