【发布时间】:2012-07-06 20:35:18
【问题描述】:
我正在使用淘汰赛 js 和选择的插件 (https://github.com/harvesthq/chosen) 来尝试制作一个好看的多选。
我尝试了各种方法,但无法让多选功能处理我正在使用的数据。当我单击多选时,即使选项绑定包含正确的数据,也不会显示任何值。
HTML:
<select multiple="multiple" data-bind="options: allCustomers,
selectedOptions: event().customers, optionsText: 'name',
optionsValue: 'id', chosen: true " ></select>
视图模型的简化版:
function Event()
{
this.customers = ko.observableArray();
};
//for chosen plugin
ko.bindingHandlers.chosen = {
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
$(element).chosen();
}
}
function ViewModel()
{
this.event = ko.observable(new Event());
this.allCustomers = ko.observableArray();
};
var viewModel = new ViewModel();
$.getJSON("/get_json", function(data)
{
for (var c = 0; c < data.customers.length; c++)
{
viewModel.allCustomers.push(data.customers[c]);
}
});
ko.applyBindings(viewModel);
PHP:
function get_json()
{
$eventData = array(
'customers' => array(array('name' => 'Bob', 'id' => 1), array('name' => 'John', 'id' => 2)),
'moreData' => array(),
'evenMoreData' => array()
);
echo json_encode($eventData);
}
这显示了所选样式的选择框,但是当我单击它时,没有出现任何选项。
当我在视图模型中为客户创建一个本地 JS 数组并将其传递给 allCustomers 时,多选可以正常工作(请参阅我的 jsfiddle),因此它与从服务器获取数据有关,但我已经盯着这个看了一会儿,看不出问题!
非常感谢任何帮助
【问题讨论】:
-
如果你
console.log()这个数组,它匹配本地测试版本吗?页面上没有 javascript 错误? -
正确,没有错误,数组与本地测试版本匹配。
-
可能是异步调用开始,然后应用绑定,然后异步返回并推送到视图模型。当我将新客户推送到数组中时,他们没有出现在选择中,这告诉我选择的更新在初始绑定后不起作用。
标签: php jquery knockout.js jquery-chosen