Knockout.js KnockoutJs:从模型实例获取绑定元素

Knockout.js KnockoutJs:从模型实例获取绑定元素,knockout.js,Knockout.js,是否有可能获取数据(模型)实例绑定到的相应元素(或多个元素) 例如,我在ViewModel属性中存储了一组“Person”对象 我将ViewModel绑定到渲染它的视图,例如: <div class="people" data-bind="template: { foreach: people }"> <a href="#" class="person" data-bind="text: name"></a> </div> 在我的show

是否有可能获取数据(模型)实例绑定到的相应元素(或多个元素)

例如,我在ViewModel属性中存储了一组“Person”对象

我将ViewModel绑定到渲染它的视图,例如:

<div class="people" data-bind="template: { foreach: people }">
    <a href="#" class="person" data-bind="text: name"></a>
</div>
在我的
showPerson
方法中,我将保存对模型的引用。我/可以/也可以保存对元素的引用,但如果不需要,我不想保存

self.showPerson=功能(个人){
//我可以从“person”模型中获得相应的元素吗?
};

有人有什么想法吗?

为什么不在您的
foreach
中移动click事件绑定

在这种情况下,您的
showPerson()
函数将具有
person

编辑:

对不起,我想我没有抓住你问题的核心:

self.showPerson = function (person, event) {
     element = event.srcElement
     ...
}

我不熟悉$container与jquery的语法和用法以及“.person”的第二个参数,但在您的单击处理程序中,
这不是被单击的元素吗?难道你不能把它也传给你的表演方法吗

$container.on('click', '.person', function(e){
    e.preventDefault();
    self.showPerson( ko.dataFor(this), this );
});

self.showPerson = function(person, element) {
    // can i get the corresponding element from the 'person' model?
};
我不知道有什么方法可以从我的头脑中得到一个可观察的物体所绑定的元素,但它可能是几个不同的元素。例如,您可以为“name”设置一个文本框,在span中显示名称,在计算中使用名称,拥有订阅者,并在另一个绑定中的计算中使用name().length


这就是说,如果您使用knockout的调试版本,您可以看到您的可观察对象有一个
\u subscriptions
属性,该属性可能包含您要查找的内容。我认为缩小版是一些单个字符。

您只需创建一个自定义绑定即可

self.showPerson = function(data, event) {
  // event.currentTarget is the DOM element
  // $(event.currentTarget) gives the jQuery element
}
    // data-bind="element: observable"
    // sets observable to element ..
    ko.bindingHandlers.element = {
        init: function(element, valueAccessor) {
            var target = valueAccessor();
            target(element);
        }
    };
在视图模型中,创建一个“字段”来存储元素:

person.el = ko.observable(null);
然后在html模板中

<div data-bind="element: el"> .... </div>
。。。。

我认为最佳实践是直接绑定到视图模型上的函数,而不是附加处理程序


谢谢你的回复,但这不是我要问的
showPerson()
获取正确的数据。我在问是否可以从传递到
showPerson()
的模型实例中获取相应的元素,谢谢您的回复。当然,最简单的方法是保存对元素的引用,但在我的问题中,我已经提到,如果不需要的话,我不想这样做。但是我想你的回答已经证实了,不可能得到可观测元素的列表,我觉得这缺少knockoutjs的API方法。我在问我是否可以从模型中得到元素,而不是从事件处理程序参数中。这应该是答案,因为这是页面上唯一允许我从内部视图模型访问绑定元素的解决方案,而不是在单击时,而是在绑定后立即访问。这使它变得非常简单,并允许您创建多个观察对象来保存对模型中多个HTML对象的引用。多好的解决方案啊!