我想使用observableArray作为select2插件中的默认标签,但我正在努力获得正确的上下文并以正确的方式设置插件。
这是html:
<div data-bind="with: SelectedText">
<h1>Title: <span data-bind="text: Title"></span></h1>
<div>
<label>A: Local Managers:</label>
<input type="hidden" data-bind="value: managerTags, select2: { tags: $root.Tags, minimumInputLength: 1, tokenSeparators: [',', ' '] }">
<label>B: Global Managers:</label>
<input type="hidden" data-bind="value: $root.managerTags, select2: { tags: $root.promans, minimumInputLength: 1, tokenSeparators: [',', ' '] }">
C: Local Selected: <span data-bind="text: managerTags"></span>
D: Global Selected: <span data-bind="text: $root.managerTags"></span>
</div>
</div>
请在此处查看完整的小提琴:http://jsfiddle.net/6cWDX/
为什么“A:Local Managers”的上下文不适用于“C:Local Selected”? 如何使用Tag对象数组(self:Tags)作为select2插件的选项?
答案 0 :(得分:1)
实际上,$ root.SelectedText.managerTags和managerTags都会在您的代码段(SelectedText)的上下文中产生相同的结果,正如您所期望的那样。它在$ root.SelectedText.managerTags上的$ root.managerTags上的工作方式不同,原因是前者是一个字符串数组,后者是一个对象数组:
Local Selected: <span data-bind="text: ko.toJSON(managerTags)"></span>
<br>
Global Selected: <span data-bind="text: ko.toJSON($root.managerTags)"></span>
结果:
Local Selected:[{“Id”:1,“Name”:“Ronald”,“Type”:0},{“Id”:4,“Name”:“George”,“Type”:0} ] 全球精选:“Asle,Jørgen”
编辑: 您在A和C之间注意到的差异是:
$root.SelectedText.managerTags
不起作用,因为SelectedText是可观察的。这样做:
$root.SelectedText().managerTags
将为A和C生成相同的结果