2013-02-05 100 views
3

有没有办法向WinJS.Binding.converter()函数发送多个参数?请看下面的数据和输出:发送多个参数到WinJS.Binding.converter()函数

 { contactName: "Tara Miller", mainNumber: "555-405-6190", alternateNumber: "555-209-1927" }, 
     { contactName: "Bryan Bond",        alternateNumber: "555-574-4270" }, 
     { contactName: "Jenna Siever", mainNumber: "555-843-8823", alternateNumber: "555-799-5424" }, 

enter image description here

下面是HTML。该MyData.chooseBestNumber转换器的功能是用来显示无论是一个人的主要电话号码或将“无主号”,如果他们没有一个主号:

<div id="listViewTemplate" data-win-control="WinJS.Binding.Template"> 
    <div class="contactCard"> 
     <div data-win-bind="innerText: contactName"></div> 
     <div data-win-bind="innerText: mainNumber MyData.chooseBestNumber"></div> 
    </div> 
</div> 

这里是JS定义转换器功能:

WinJS.Namespace.define("MyData", { 
    chooseBestNumber: WinJS.Binding.converter(function (mainNumber) { 
     if (mainNumber) return mainNumber; 
     else return "no main number"; 
    }), 
}); 

下面是我最终希望能够做到的......将多个参数传递到转换函数,以便我可以返回主数字(如果已定义),备用数字(作为后备)或消息(如果一切都失败):

WinJS.Namespace.define("MyData", { 
    chooseBestNumber: WinJS.Binding.converter(function (mainNumber, alternateNumber) { 
     if (mainNumber) return mainNumber; 
     else if (alternateNumber) return alternateNumber; 
     else return "no phone numbers"; 
    }), 
}); 

是否可以向WinJS.Binding.converter()函数发送多个参数?

回答

7

实际上,您可以将您的电话号码div绑定到this关键字,这将有效地将该div的innerText属性绑定到整个模型对象。这样在你的转换器中,你可以访问整个模型。

所以你更新的代码应该是这样的:

HTML

<div id="listViewTemplate" data-win-control="WinJS.Binding.Template"> 
    <div class="contactCard"> 
     <div data-win-bind="innerText: contactName"></div> 
     <div data-win-bind="innerText: this MyData.chooseBestNumber"></div> 
    </div> 
</div> 

JavaScript的转换器

WinJS.Namespace.define("MyData", { 
    chooseBestNumber: WinJS.Binding.converter(function (model) { 
     if (model && model.mainNumber) return mainNumber; 
     else if (model && model.alternateNumber) return alternateNumber; 
     else return "no main number"; 
    }), 
});