2012-02-21 61 views
1

我有一个自定义的数据绑定这样的:应用数据绑定到DOM元素的自定义数据绑定

ko.bindingHandlers.calendar = { 
      init: function(element, valueAccessor) { 
       var value = valueAccessor() || {};    
       var calType = $('<select style=""><option value="gregorian">Miladi</option><option value="islamic">Hicri</option><option value="rumi">Rumi</option></select>');                

       // Need to something to apply this binding for the calType variable 
       calType['attr']('data-bind', 'chosen : true'); 

       .... 
       .... 

       $(element).before(calType); 
      } 
}; 

ko.bindingHandlers.chosen = { 
       init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
        $(element).chosen(); 
       }, 
       update: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
        $(element).trigger("liszt:updated"); 
       } 
}; 

我想申请选择日历结合内部动态创建的DOM元素上结合。有什么办法可以做到这一点?

+0

相当复杂...你确定你需要这个...? – Madman 2012-02-21 15:23:03

+0

我可以做到这一点不同,你有什么想法? – Luffy 2012-02-21 17:04:23

+0

也许最好事先创建所有必需的元素并映射到VM中的某些条件属性,然后在自定义绑定中执行操作或让ko处理它。写更多的细节或问更多的一般问题,我们会找到另一种方法如何解决您的问题 – Madman 2012-02-21 20:54:37

回答

2

你应该调用“ko.applyBindings(viewModel);”在创建动态创建的dom元素之后。

+0

您好,我检查了您的建议,但那不工作。它给了我一个不属于viewModel这部分的异常。 “未捕获的错误:无法解析绑定。” 消息:TypeError:Object#没有方法'enabled';' ko.applyBindings(x)尝试绑定所有viewModel,但我只需要该元素。你必须考虑到这个代码可能会在初始绑定之后运行。 – Luffy 2012-02-21 17:03:23

+0

我也试过ko.applyBindings(viewModel,x),但又得到了另一个异常。这次它选择的plugin.Uncaught TypeError:无法设置未定义属性'disabled' h.search_field_disabled。必须挖掘选定的库来找出实际问题。 – Luffy 2012-02-21 17:34:25

+0

最后我可以通过ko.applyBindings(viewModel,x)来做到这一点。感谢您的线索。 – Luffy 2012-02-21 20:42:44