使用data-win-res属性动态绑定资源

时间:2013-02-04 09:43:18

标签: winapi windows-8 windows-store-apps winjs

我有一个对象,其中包含要加载的资源的id,并希望将其绑定在模板本身中。 通常资源可以这样绑定:

<div class="description" data-win-res="{textContent:'taxCalDescription'}" ></div>
<div class="name" data-win-bind="textContent:'TaxCal'" ></div>

其中resid是字符串资源的id。但是没有直接拥有id,我有一个对象,其中一个元素是资源ID。说我有一个对象,

var tool = {
    name: "TaxCal",
    descriptionResId : "taxCalDescription"
}

我尝试像这样绑定它,

<div class="description" data-win-res="{textContent: tool.descriptionResId}" ></div>
<div class="name" data-win-bind="textContent:tool.name" ></div>

虽然data-win-bind可以访问tool对象,但data-win-res却无法访问'cannot find descriptionResId of undefined'。它会引发错误,指出{{1}}

那么,如何将动态资源ID绑定到模板?

1 个答案:

答案 0 :(得分:0)

我相信在这种情况下,您需要直接更改资源API的使用。

您可以通过以下两种方式之一完成此操作:

  1. 让您的数据提供本地化字符串:当您加载本地化名称时,可以使用资源ID

    <来调用WinJS.Resources.getString / LI>
  2. 使用WinJS.Binding.converter根据传入值动态加载它。 E.g。

  3. 示例:

    WinJS.Namespace.define("YourNamespace", {
        loadToolName: WinJS.Binding.converter(function(input) {
            switch(input) {
                case "notlocalizedname":
                    return WinJS.Resources.getString("MyID");
                default:
                    return "Unknown";
            }
        }),
    });
    

    然后,在你的标记中,你的绑定看起来像:

    <div class="description"
         data-win-bind="textContent: tool.descriptionResId YourNamespace.loadToolName">
    </div>