Javascript 从Knockout.js选项数组中删除后重新初始化Materialize.css选择框

Javascript 从Knockout.js选项数组中删除后重新初始化Materialize.css选择框,javascript,knockout.js,materialize,Javascript,Knockout.js,Materialize,我有一个选择框,通过Knockout.js处理选项和选择。我想用物化CSS来设计这个样式 对于选择框的初始显示,以及将选项添加到Knockout.js的“options”observableARay时,可以使用“optionsAfterRender”绑定在添加每个选项后(重新)初始化(浪费,但有效) 删除选项时,Knockout.js不提供任何类似于“optionsAfterRender”的功能,因此没有明显的方法触发MaterializeCSS magic的重新初始化 问:你能看到一些非疯狂的

我有一个选择框,通过Knockout.js处理选项和选择。我想用物化CSS来设计这个样式

对于选择框的初始显示,以及将选项添加到Knockout.js的“options”observableARay时,可以使用“optionsAfterRender”绑定在添加每个选项后(重新)初始化(浪费,但有效)

删除选项时,Knockout.js不提供任何类似于“optionsAfterRender”的功能,因此没有明显的方法触发MaterializeCSS magic的重新初始化

问:你能看到一些非疯狂的选择吗

代码:


(设置超时是必需的,因为如果没有设置超时,则不会选择所选选项。)

A更适合将自定义UI组件(如
material\u select
与KnockoutJS集成。以下是构建此类处理程序的一种方法:

ko.bindingHandlers[“materializeSelect”]={
之后:[“选项”],
init:函数(元素、valueAccessor、allBindings、viewModel、bindingContext){
//初始初始化:
$(元素).material_select();
//查找“选项”子绑定:
var boundValue=valueAccessor();
//在“选项”更改时注册回调:
boundValue.options.subscribe(函数(){
$(元素).material_select();
});
},
更新:函数(元素、valueAccessor、allBindings、viewModel、bindingContext){
}
};
函数RootViewModel(){
var self=这个,i=2;
self.options=ko.observearray([{id:1,txt:“Option A”},{id:2,txt:“Option two”}]);
self.selectedOption=ko.可观察(空);
//出于测试目的:
self.addOption=function(){self.options.push({id:++i,txt:“动态选项”+i});};
}
applyBindings(新的RootViewModel())


动态添加选项
Jeroen的回答很好,也很正确,我想用SO注释添加一个附录,但我认为完整的格式更好

当放置在select上时,Materialize对
disable
绑定的响应似乎有点奇怪,特别是当该禁用依赖于另一个敲除可观察对象(通常是这样)的更新时

我在更新功能中使用以下功能:

if(allBindings().disable != undefined && allBindings().disable == true){
   $(element).prop("disabled", true);
}
else{
   $(element).prop("disabled", false);     
}

$(element).material_select();
我最初尝试在update函数中调用
$(element).material\u select()
,但它似乎有点不可靠,只在某些时候起作用。显式更改元素上的disabled属性似乎每次都有效

可能有一种更简洁的方法可以做到这一点,但希望这个示例能够说明这一点:根据绑定的状态显式设置disabled属性


我不知道使用其他绑定时是否会遇到类似的问题,
可见
等,但如果是,这些问题可能会以类似的方式得到解决。

我通常称之为
。material\u select('destroy')在重新输入之前,只是为了确定。materializecss有点年轻,我渴望得到一个完美的工作答案——这也解决了我遇到的下一个问题,即如何在KO模型中的值更改后重新初始化!
if(allBindings().disable != undefined && allBindings().disable == true){
   $(element).prop("disabled", true);
}
else{
   $(element).prop("disabled", false);     
}

$(element).material_select();