最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Knockout JS - data-bind multiple values - Stack Overflow

programmeradmin1浏览0评论

Question about JS Knockout library - I have three inputs, all data-Bind-ed to the same variable. Two have a boolean value of false and one has a boolean value of true. (I can't change them to ints, unfortunately, which would make this problem easier). Although the two false-valued inputs share behavior, I need to differentiate between them somehow to trigger slightly different behaviors.

Is it possible to data-bind each to another variable, with different values? So instead of each being

    <input data-Bind="checked:test" value="false">

I would have something like

    <input data-Bind="test, test2" value="false, 1">

and

    <input data-Bind="test, test2" value="false, 2">?

I tried that directly and didn't work so I don't know if it's possible. Thanks so much.

Question about JS Knockout library - I have three inputs, all data-Bind-ed to the same variable. Two have a boolean value of false and one has a boolean value of true. (I can't change them to ints, unfortunately, which would make this problem easier). Although the two false-valued inputs share behavior, I need to differentiate between them somehow to trigger slightly different behaviors.

Is it possible to data-bind each to another variable, with different values? So instead of each being

    <input data-Bind="checked:test" value="false">

I would have something like

    <input data-Bind="test, test2" value="false, 1">

and

    <input data-Bind="test, test2" value="false, 2">?

I tried that directly and didn't work so I don't know if it's possible. Thanks so much.

Share Improve this question edited Jul 7, 2012 at 0:12 user1436111 asked Jul 7, 2012 at 0:05 user1436111user1436111 2,1417 gold badges24 silver badges41 bronze badges 1
  • So, none of those bindings are valid, and I'm not entirely sure what you are trying to do, or how you expect this to behave. If the value of test1 updates, and doesn't match test2 what would you want to happen? You might be able to achieve this with puted observables, but you cannot bind to two properties like this. And I don't know why you would want to. – Kyeotic Commented Jul 7, 2012 at 0:58
Add a ment  | 

1 Answer 1

Reset to default 4

You cant bind multiple variables directly but creating a custom bind function do the trick for you.

Example : http://jsfiddle/gurkavcu/ePW8Y/
** Change input value (true , false) to trigger the update function

HTML

<input data-bind="customData: test , v1 : test2"/>
<div>
    <span data-bind ="text : test"/>
</div>
<div>
    <span data-bind ="text : test2"/>
</div>

JS

ko.bindingHandlers.customData = {
      init: function(element, valueAccessor, allBindingsAccessor, viewModel) {  
           $(element).change(function () {
                valueAccessor()(element.value);
            });       
      },
       update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
          var value =ko.utils.unwrapObservable(valueAccessor());
          var v1 = allBindingsAccessor().v1;

          if(value === "true") {
             v1("1"); 
             console.log(v1());
          }
          else  if(value === "false") {
             v1("2"); 
             console.log(v1());
          }
     }
};  


function ViewModel() {

    this.test =  ko.observable(false);
    this.test2 =  ko.observable("2");

};

$(function() {  

    var viewModel = new ViewModel();
    ko.applyBindings(viewModel); 

})​

Modify the update function for your needs. You can add any number of variable to the binding with v1 : ... , v2 : ... , v3 : ... and access it via allBindingsAccessor().v1 , allBindingsAccessor().v2 , allBindingsAccessor().v3

发布评论

评论列表(0)

  1. 暂无评论