2012-12-23 121 views
69

可以从给定的DOM元素获取绑定的ViewModel JavaScript对象吗?knockout.js - 从DOM元素获取ViewModel

ko.applyBindings(gLoginViewModel, document.getElementById("login-form")); 
ko.applyBindings(gLoginViewModel, document.getElementById("register-form")); 

和其他地方 - 在相当无关的代码 - 这样的事情:

var viewModel = ko.getViewModel(formElement); 
viewModel.someObservable(someData); // observable available in all ViewModels 

它甚至会更好,如果我可以这样做:

var viewModel = ko.getViewModel(someChildElement); 

提前感谢!

回答

118

淘汰赛有两个utility methods这可能有帮助。

  • ko.dataFor将返回元素绑定到的ViewModel。
  • ko.contextFor返回当前元素的“绑定上下文”。你从这个方法返回的对象将返回类似:

    { 
        $data: ..., 
        $parents, 
        $root 
    } 
    

所以,如果我理解你的问题,你也许可以使用ko.dataFor这里。 Here's a simple example使用dataFor

+9

那么他们在这里记录:http://knockoutjs.com/documentation/unobtrusive-event-handling.html :) –

+1

@RPNiemeyer:啊,哎呀,谢谢你的链接。 –

+0

完美! :) 谢谢 –