ko.bindingHandlers["materializeSelect"] = {
after: ['options'],
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
$(element).material_select();
var boundValue = valueAccessor();
boundValue.options.subscribe(function() {
$(element).material_select();
});
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
}
};
function RootViewModel() {
var self = this, i = 2;
self.options = ko.observableArray([{id: 1, txt: "Option A"}, {id: 2, txt: "Option two"}]);
self.selectedOption = ko.observable(null);
self.addOption = function() { self.options.push({id: ++i, txt: "Dynamic option " + i}); };
}
ko.applyBindings(new RootViewModel());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.4/js/materialize.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.4/css/materialize.min.css" rel="stylesheet"/>
<select data-bind="materializeSelect: { options: options },
options: options,
optionsText: 'txt',
value: selectedOption">
</select>
<button data-bind="click: addOption">Add option dynamically</button>
.material_select('destroy');
,以确保。在我看来,materializecss有点年轻。 - Andrei C