2013-02-22 34 views
1

我已經在我們的Web應用程序之外的幾個位置編寫了一個大型數據API,我想將knockout集成到應用程序中。它似乎與淘汰賽,你可以創建一個模型與observables。我無法想象的是觀察API中預先存在的值的一種方式。這是甚至可能的,還是我需要一箇中間模型來推動數據來回?這看起來非常不方便且效率低下。我錯過了明顯的東西嗎?Knockout.js觀察預先存在的API對象的成員

在下面的代碼中,我想觀察名稱屬性。我喜歡這裏最好的方法建議嗎?

編輯:該方法首選將觀察員附加到已有的屬性,而不是寫在圍繞敲除我的API或寫在API的頂部的一個額外的包裝。這個API與一些非瀏覽器應用程序共享,我認爲這消除了使用knockout編寫整個API而不增加額外複雜性的可能性。我願意考慮其他可以做我需要的框架。

myAPI.user = { 
    ... 
    get name() { 
     return myAPI.user.object.name; 
    }, 
    set name(x) { 
     myAPI.user.setProperty('name', x); 
    } 
    ... 
}; 

回答

1

您可以編寫自定義computed

var VM = function() { 
    this.apiUserName = ko.computed({ 
     read: function() { return myAPI.user.object.name; }, 
     write: function(value) { return myAPI.user.setProperty('name', value); }, 
     owner: this 
    }); 
} 

現在,如果myAPI.user.object.name變化和你有這方面的活動,呼籲valueHasMutated

// inside your event 
vm.apiUserName.valueHasMutated(); 
+0

糾正我,如果我錯了,你告訴我valueHasMutated需要調用,如果名稱從外部來源更改。 – 2013-02-22 19:18:51

+0

他說如果'myAPI.user.object.name'發生變化,就會調用它,以便Knockout將被通知更改。 – Pete 2013-02-22 19:24:44

+1

@mikerobertking正確。 – 2013-02-22 19:25:09

相關問題