2012-08-10 80 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