ko(knockoutjs)动态属性绑定
2013-05-22 21:22 阅读(172)

ko的动态属性是指,ViewModel不确定的属性,而后期却需要的属性。

什么是不确定属性,比如ListModel如果 编辑某一项,想把这一项的状态变更为Edit。数据并不包括Edit属性,mvvm绑定时,会发现报错。

那么一定需要拓展ko才能达到我们的目的。

JS拓展:

          ko.bindingHandlers.ext = {
              update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
                  var value = ko.utils.unwrapObservable(valueAccessor());
                  for (var handler in value) {
                      if (value.hasOwnProperty(handler)) {
                          if (typeof viewModel[value[handler]] == 'undefined') {
                              viewModel[value[handler]] = ko.observable();
                          }
  
                          ko.bindingHandlers[handler].update(element, function () { return viewModel[value[handler]]; });
                      }
                  }
              }
          };
JS模型:

$(function () {
             var viewModel = function () {
             };
              ko.applyBindings(new viewModel());
 });
UI绑定:

 <div data-bind="ext:{text: 'text'}"></div>
<!--事件 便于 测试-->
<a href="javascript:void(0)" data-bind="click:function(){$data.text(1);}">更改text值</a>

ext中,第一个text是ko 内置绑定名,第二个text必须是字符串,是动态绑定的属性名,。所以ext的动态属性,可以使用于任何ko方法,比如ext:{text:'text', value:'text'}

呈现: