Javascript 创建后的敲除绑定
简单地说:Javascript 创建后的敲除绑定,javascript,knockout.js,Javascript,Knockout.js,简单地说: <div data-bind="with: viewModel"> <h1 data-bind="text: someproperty"></h1> <button data-bind="click: createNewButton">Create new Button</button> <div data-bind="foreach: buttons"> <di
<div data-bind="with: viewModel">
<h1 data-bind="text: someproperty"></h1>
<button data-bind="click: createNewButton">Create new Button</button>
<div data-bind="foreach: buttons">
<div data-bind="html: button"></div>
</div>
</div>
创建新按钮
JavaScript:
var viewModel = function () {
var self = this;
self.someproperty = ko.observable("hi");
self.buttons = ko.observableArray([]);
self.createNewButton = function () {
self.buttons.push("<button data-bind='click: doThis'></button>");
}
self.doThis = function () {
console.log(this);
}
}
ko.applyBindings({viewModel: new viewModel()});
var viewModel=函数(){
var self=这个;
self.someproperty=ko.可观察(“hi”);
self.buttons=ko.observearray([]);
self.createNewButton=函数(){
self.按钮。按(“”);
}
self.doThis=函数(){
console.log(this);
}
}
applyBindings({viewModel:newviewmodel()});
因此,一旦按钮被添加到observable中并且视图被更新,我就想重新应用绑定。这可能吗?您最好使用模板来解决此问题,如下所示:
<script type="text/html" id="btnTemplate'>
<button data-bind='click: $root.doThis'></button>
</script>
<div data-bind="with: viewModel">
<h1 data-bind="text: someproperty"></h1>
<button data-bind="click: createNewButton">Create new Button</button>
<div data-bind="template: { name: 'btnTemplate', foreach: buttons }">
</div>
</div>
您设置了for each a button属性,但我在模型中没有看到该属性。你能更具体地说你想完成什么吗?没关系,有人回答了我想看到的,这很聪明!!因此,使用模板时,我不需要任何额外的库,如tmpl?那么,当前上下文是否会传递给单击,因此,如果这是在一个表中,并且您希望将当前项($data
)发送给单击进行处理,这可能吗?@No1_Melman不,您不需要任何额外的库,淘汰赛天生支持模板制作。如果使用模板,而不是我第二次发布的hack,那么单击绑定事件会将上下文作为第一个参数传递。类似于:函数(datacontext,event){//access datacontext here}
<div data-bind="foreach: { data: buttons, afterRender: bindNode }">
</div>
self.bindNode = function(elements, data) {
var element = $(elements).filter('div');
ko.applyBindingAccessorsToNode(element[0],
{
click: function() { return self.someAction } //Needs to be wrapped in a function call
} );
}