对象文字中的自定义挖空绑定

时间:2014-02-25 14:10:10

标签: javascript knockout.js

如何实现可以在对象文字中声明的多个自定义挖空绑定?

基本上不是这样做的:

 <input data-bind="customBinding1:observable1, customBinding2: observable2 }" />

我希望能够做到这一点:

<input data-bind="customBinding0: { customBinding1: observable1, customBinding2: observable2 }" />

提前感谢。

1 个答案:

答案 0 :(得分:0)

使用Knockout,绑定在名称/值对中指定,其中name是绑定的名称,value是使用valueAccessor()在绑定中检索的值

听起来您可能想要将多个值传递给绑定,就像您的剑道示例所示。虽然每个绑定只能有一个值,但该值可以是任何值。这意味着您可以将对象文字作为值传入,并且该对象可以包含任意数量的属性。这些属性也可以是您想要的任何类型 - 您只需要在绑定中正确处理它们。

这是一个简单的例子:

查看

<div data-bind="myBinding: {setting1: viewModelProperty1, 
                            setting2, viewModelProperty2}"></div>

<强>装订

ko.bindingHandlers.myBinding = {
    init: function(element, valueAccessor) {
        var options = valueAccessor() || {};

        //this gives you the value of setting1
        var setting1 = ko.utils.unwrapObservable(options.setting1);

       //if you need to do something just when `setting1` changes,
       //  add a subscription to the value like so:
       if( ko.isObservable(options.setting1) ){
           options.setting1.subscribe(function(newValue){
              //do something because the setting1 value changed
           });
       }
    }
};

您还可以选择指定多个绑定,每个绑定都有自己的值,并引用第一个绑定中的附加绑定和值。 Knockout的optionsoptionsText绑定就是这种方法的一个例子。

优秀资源: http://www.knockmeout.net/2011/07/another-look-at-custom-bindings-for.html

请花一些时间在上面的链接中学习和试验示例。这里有很多很好的信息,涵盖了你需要做的事情。