WinJS Databind到属性get/set

B Z*_*B Z 3 javascript windows-8 winjs

在WinJS中,我可以在listView中绑定属性getter吗?假设我有一个像这样定义的对象:

var MyLib = MyLib || {};

MyLib.ToDoItem = function() {
  this.name = '';
  this.description = '';
  Object.defineProperty(this, "completed", {
    get : function() {
      return false;
    }
  });
}

MyLib.ToDoList = []; 
//MyLib.ToDoList.push....add todo items
Run Code Online (Sandbox Code Playgroud)

我声明一个WinJS.Binding.Template,其中所有属性都绑定,除了使用属性getter定义的属性:

<div id="myItemTemplate" data-win-control="WinJS.Binding.Template">
  <div class="titleTile">
    <h4 class="item-title" data-win-bind="textContent: name"></h4>

    <p data-win-bind="textContent: description"></p>

    <div data-win-bind="textContent: completed"></div> <-- Renders as undefined
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

"已完成"属性呈现为未定义.如果我在我正在加载数据的javascript控制台中放置一个断点,我可以进入已完成的属性,但数据绑定似乎不喜欢它...任何想法?

min*_*amo 7

你吸气后错过了一行.

get : function() {
  return false;
}
, enumerable: true
Run Code Online (Sandbox Code Playgroud)

通过将enumerable设置为true,可以使数据绑定适用于此属性.

  • 顺便说一下,你应该在构造函数之外移动函数和属性定义,这样做会获得更好的性能.http://msdn.microsoft.com/en-us/library/windows/apps/hh781219.aspx#structure_objects_correctly (2认同)
  • 只是为了加起来,enumerable不仅仅是WinJS的关键字.https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty (2认同)