Tôi đang sử dụng jacks loại trực tiếp và plugin được chọn (https://github.com/harvesthq/chosen) để thử và tạo một lựa chọn tốt.Knockout JS và Chosen multiselect không hoạt động
Tôi đã thử nhiều cách khác nhau nhưng không thể chọn nhiều lựa chọn để làm việc với dữ liệu tôi đang sử dụng. Khi tôi bấm vào multiselect, không có giá trị được hiển thị mặc dù các tùy chọn ràng buộc có chứa các dữ liệu chính xác.
HTML:
<select multiple="multiple" data-bind="options: allCustomers,
selectedOptions: event().customers, optionsText: 'name',
optionsValue: 'id', chosen: true " ></select>
phiên bản đơn giản của mô hình điểm:
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);
}
Điều này cho thấy lựa chọn theo kiểu chọn hộp nhưng khi tôi nhấp vào trong nó, không có tùy chọn nào xuất hiện.
Khi tôi tạo một mảng JS cục bộ trong mô hình chế độ xem cho khách hàng và chuyển nó vào allCustomers, multiselect hoạt động chính xác (xem jsfiddle) của tôi, vì vậy nó liên quan đến việc lấy dữ liệu từ máy chủ, nhưng tôi đã nhìn chằm chằm vào điều này một lúc và không thể nhìn thấy vấn đề!
Bất kỳ giúp nhiều đánh giá cao
Nếu bạn 'console.log()' mảng, nó có khớp với phiên bản thử nghiệm cục bộ không? Bạn không có lỗi javascript trên trang? – Tyrsius
Đúng, không có lỗi và mảng khớp với phiên bản thử nghiệm cục bộ. – peacemaker
Có thể là cuộc gọi không đồng bộ bắt đầu, sau đó các ràng buộc được áp dụng, sau đó async trả về và đẩy đến viewmodel. Khi tôi đẩy khách hàng mới vào mảng, họ không hiển thị trong lựa chọn, cho tôi biết bản cập nhật đã chọn không hoạt động sau khi liên kết ban đầu. – Tyrsius