ノックアウトjsと選択したプラグイン(https://github.com/harvesthq/chosen)を使用して、見栄えの良いマルチセレクションを作成しようとしています。ノックアウトJSと選択したマルチセレクションが機能しない
私はさまざまな方法を試みましたが、私が使用しているデータで動作するようにマルチ選択を行うことはできません。複数選択をクリックすると、オプションバインディングに正しいデータが含まれていても値が表示されません。
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エラーがありませんか? – Tyrsius
正しいですが、エラーはなく、配列はローカルテストバージョンと一致します。 – peacemaker
非同期呼び出しが開始され、バインディングが適用され、非同期が返されてviewmodelにプッシュされる可能性があります。新しい顧客を配列にプッシュすると、selectに表示されず、選択した更新が最初のバインドの後に機能していないことがわかります。 – Tyrsius