【问题标题】:KnockoutJS: Add Property to ViewModel through Custom BindingKnockoutJS:通过自定义绑定向 ViewModel 添加属性
【发布时间】:2015-07-12 15:27:12
【问题描述】:

我正在向我的页面添加自定义绑定。在其中,我想将我创建的对象之一保存为 viewModel 的属性。当我这样做时,当我尝试在绑定之外访问它时,我会得到“未定义”。为什么?这是一个简化的示例:

HTML:

<div id = "myDiv" data-bind = "fooAdd: myFoo"></div>

JavaScript:

ko.bindingHandlers.fooAdd = {
  init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
    var foo = 1;
    viewModel._foo = foo;
  }
};

var ViewModel = function(){
  var self = this;
  self.myFoo = ko.observable({});
  console.log(self); //Here I can expand the object returned in 
                     //the console and see that _foo is equal to 1.
  console.log(self._foo); //returns undefined
};

ko.applyBindings(new ViewModel());

【问题讨论】:

  • 有什么理由让您期望在构造函数完成之前设置_foo?您可以在控制台中“扩展”对象并查看 _foo 的原因是因为您正在打印整个对象(大多数调试器会保持最新),因此在它记录自定义绑定后的几毫秒内应用并且属性已设置。

标签: javascript mvvm knockout.js


【解决方案1】:

从您的示例中,您在 init 中设置了新属性,该属性仅在应用绑定时被调用,但您试图在视图模型的构造函数中访问它。在 applyBindings 调用之后尝试console.log(viewmodel._foo)

【讨论】:

  • 将最后几行更改为:myView=new ViewModel(); ko.applyBindings(myView); myView._foo; 有效。我现在明白了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多