我嘗試在我的頁面上綁定observableArray
到div
並且一切正常。該陣列包含從WebService
獲得的簡單的JSON
對象,不可觀察。ObservableArray在項目發生變化時不會通知
之後,我希望能夠修改陣列中的這些對象,並希望每次修改都刷新視圖。例如,當點擊複選框時,我想更改我的JSON
對象上的標誌(這似乎自動工作),同時我的UI應該更新,這不會發生。任何人都可以向我提供原因(這是因爲這些對象很簡單,不可觀察?)和解決方案?
var DocumentContentModel = function() {
var self = this;
self.content = ko.observableArray();
self.ElementApprovalChanged = function (element) {
DocumentService.DoSomething(
element.Id,
function (result) {
if (!result) {
var negatedApproved = !element.Approved;
element.Approved = negatedApproved;
}
},
function (error) {
alert(error);
});
return true;
};
};
$(document).ready(function() {
var contentModel = new ContentModel();
DocumentService.GetContent(1,
function (result) {
contentModel.content(JSON.parse(result));
});
ko.applyBindings(contentModel);
});
UI
<div class="ContentContainer">
<div data-bind='foreach: content'>
<div class="ContentElement" data-bind='css: { NotApproved: !Approved} '>
<div class="ContentValue" data-bind='html: Value'></div>
<div class="Approval">
<input type="checkbox" data-bind='checked: Approved, click: $root.ElementApprovalChanged' />
</div>
</div>
</div>
</div>
正在發生的事情是在複選框點擊我發送請求的web服務,如果此調用返回false我想重置元素的Approved
標誌。即使沒有,選擇複選框應該改變div
class屬性以在需要時將其標記爲NotApproved
。但是沒有一個發生。
是的,但我獲得了所有這些元素的數組從'WebService',我不能改變它們(或者我可以嗎?我遠不是'javascript'的專家)。所以我想知道是否有任何方法來重新評估數組綁定。 – Pako 2012-03-08 11:07:30
沒問題,Pako。你需要knockout映射插件,這是爲了將JSON轉換爲ko對象並再次返回的目的。請參閱http://knockoutjs.com/documentation/plugins-mapping.html上的文檔 – 2012-03-08 11:11:12
這正是我所尋找的,非常感謝! – Pako 2012-03-08 11:23:12