2012-08-10 83 views
1

我有一個關於使用敲除映射插件的問題。敲除映射插件不能創建可觀察的屬性

我從服務器獲取一個簡單的數組,並使用映射插件將其轉換爲javascript對象。因爲我希望項目上的屬性是可觀察的,所以我爲pugin提供了創建回調的自定義映射。

var meeting = function (id, titel, description) { 
     var self = this; 
     self.Id = id; 
     self.Titel = ko.observable(titel); 
     self.Description = ko.observable(description); 
     self.Test = ko.computed(function() { return self.Description(); }); 
     return self; 
    } 

    var mapping = { 
     create: function (json) { 
      return new meeting(json.data.Id, json.data.Titel, json.data.Description); 
     } 
    } 

當我打電話ko.mapping.fromJS(myFetchedData)我看到(附帶調試器)的創建功能被稱爲在我的陣列的每個項目。一切都綁定到HTML控件罰款。我看到一個li項目出現在數組中的每個項目中。

<ul id="meetings" data-bind=" foreach: meetings"> 
    <li class="ui-widget-content ui-corner-all"> 
     <h1 data-bind="text: Titel" class="ui-widget-header"></h1> 
     <div> 
      <input type="text" data-bind="text: $data.Description || 'Omschrijving?'"></input>, 
     </div> 
     <div> 
      <input type="text" data-bind="text: $data.Test || 'Omschrijving?'"></input>, 
     </div> 
     <a href="#" data-bind="click: $root.updateMeeting" >Update</a> 
     <a href="#" data-bind="click: $root.removeMeeting" >Remove</a></p> 
    </li> 
</ul> 

但是:Description屬性似乎不是可觀察的。更改該值不會導致Test-computed屬性的更新值。

我在這裏錯過了什麼嗎?

任何幫助,將不勝感激。

完整的示例代碼可以在這裏找到: http://jsfiddle.net/dtiemstra/wRg88/

回答

2

您需要綁定到<input>控制的value屬性 - 不是它的text屬性。

所以不是:

<input type="text" data-bind="text: $data.Description || 'Omschrijving?'"></input> 

你應該寫:

<input type="text" data-bind="value: $data.Description || 'Omschrijving?'"></input> 

http://jsfiddle.net/wRg88/8/

+0

哎喲:那疼......非常感謝 – DiederikTiemstra 2012-08-10 14:54:53

+1

不要擔心。這是每個淘汰賽開發者在某個時候發現的前10個錯誤! :-) – 2012-08-10 15:49:13