1

我有以下 html 绑定到包含 id 和状态的对象。我想将状态值转换为特定的颜色(因此转换函数 convertStatus)。我可以看到转换器在第一个绑定上工作,但是如果我更改绑定列表中的状态,我看不到任何 UI 更新,也看不到随后调用 convertStatus。我的另一个问题是尝试绑定第一个跨度的 id 属性似乎没有按预期工作(也许无法通过绑定设置此值......)

HTML:

<span data-win-bind="id: id">person</span>
<span data-win-bind="textContent: status converter.convertStatus"></span>

Javascript(我尝试使用修改状态值):

// people === WinJS.Binding.List
// updateStatus 是一个函数,由于系统中的状态变化而被调用

function updateStatus(data) {
    persons.forEach(function(value, index, array) {
        if(value.id === data.id) {
            value.status = data.status;
            persons.notifyMutated(index);
        }
    }, this);
}

我已经看到 notifyMutated(index) 对不使用转换器的值起作用。

使用 github 项目更新

示例的公共存储库(不工作) - 这是一个非常基本的应用程序,它有一个带有一组默认数据的列表视图和一个在单击项目时执行的函数。该函数尝试随机化项目的绑定字段之一并在列表上调用 notifyMutated(...) 以触发视觉更新。即使定义了 WinJS.Binding.List({ binding: true }); 除非我通过 notifyReload() 强制更新,否则我看不到更新,这会在 listview 元素上产生重新加载闪烁。

4

4 回答 4

2

回答你的两个问题:

1)为什么我不能通过绑定设置id?

这是故意阻止的。WinJS 绑定系统使用 ID 来跟踪它所绑定的元素(以避免通过悬空绑定泄漏 DOM 元素)。因此,它必须能够控制绑定模板的 id。

2) 为什么转换器不会多次触发?

Binding.List 将告诉列表视图有关列表内容的更改(添加、删除或移动的项目),但各个项目有责任通知列表视图其内容的更改。

您需要有一个可绑定的数据对象。有几个选项:

  • WinJS.Binding.as在将元素添加到集合时调用它们
  • 在 Binding.List 上打开绑定模式

后者可能更容易。基本上,当您创建 Binding.List 时,请执行以下操作:

var list = new WinJS.Binding.List({binding: true});

这样,List 将对列表中的所有内容调用 binding.as,并且内容应该开始更新。

于 2012-08-17T20:49:54.920 回答
0

我发现如果执行以下操作,我将看到 UI 绑定后的更新:

var list = new WinJS.Binding.List({binding: true});
var item = WinJS.Binding.as({
    firstName: "Billy",
    lastName: "Bob"
});
list.push(item);

稍后在应用程序中,您可以更改一些值,如下所示:

item.firstName = "Bobby";
item.lastName = "Joe";

...您将看到 UI 中的变化

这是 MSDN 上的链接以获取更多信息: MSDN - WinJS.Binding.as

于 2012-12-22T14:57:10.780 回答
0

关于设置id的值。我发现我能够为 <button> 设置 name 属性的值。我一直在尝试设置 id,但这不起作用。高温高压

于 2014-04-10T14:14:56.103 回答
0

optimizeBindingReferences 属性

确定绑定是否应自动设置元素的 ID。在使用 Windows Library for JavaScript (WinJS) 绑定的应用程序中,此属性应设置为 true。

WinJS.Binding.optimizeBindingReferences = true;

来源:http: //msdn.microsoft.com/en-us/library/windows/apps/jj215606.aspx

于 2014-06-12T13:27:39.030 回答