knockout.js 将单击事件绑定到带有挖空的选择器

hjzp0vay  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(130)

我已经搜索,我已经尝试了不同的选择器,但我不能弄清楚这一点。我下面的教程,但我没有得到一个结果。
click事件似乎没有绑定到动态生成的div'.person-brief'?没有与之关联的click事件。我也尝试了.live(),但似乎已被弃用。
你知道我做错了什么吗?

人员.js模型

var gotoDetails = function (selectedPerson) {
    if (selectedPerson && selectedPerson.id()) {
        var url = '#/persondetail/' + selectedPerson.id();
        router.navigateTo(url);
    }
};

var viewAttached = function (view) {
    bindEventToList(view, '.person-brief', gotoDetails); 
};

var bindEventToList = function (rootSelector, selector, callback, eventName) {
    var eName = eventName || 'click'; 
    $(rootSelector).on(eName, selector, function () { 
        var ser = ko.dataFor(this); 
        callback(ser);
        return false;
    });
};

var vm = {
    people: people,
    title: 'people demo',
    viewAttached: viewAttached
};
return vm;

人员.html视图

<section id="person-view" class="view">
    <header>
        <a class="btn btn-info btn-force-refresh pull-right"
           data-bind="click: refresh" href="#"><i class="icon-refresh"></i>Refresh</a>
        <h3 class="page-title" data-bind="text: title"></h3>
        <div class="article-counter">
            <address data-bind="text: people().length"></address>
            <address>found what</address>
        </div>
    </header>
    <section  class="view-list" data-bind="foreach: people">
        <article class="article-left-content">
            <div class="person-brief" title="Go to person details">
                <small data-bind="text: firstname" class="right"></small>
                <small data-bind="text: lastname"></small>
            </div>
        </article>
    </section>
</section>
7uzetpgm

7uzetpgm1#

对于KnockoutJS,您应该使用the click binding(或者the event binding),而不是使用jQuery来手动操作DOM。
类似于下面的代码:

var vm = {
    people: people,
    title: 'people demo',
    viewAttached: viewAttached
};

vm.myHandler = function (person) { 
  goToDetails(person);
  return false;
};

由于myHandler非常简单,您也可以内联goToDetails代码,它可以从闭包访问vm
在视图中绑定如下:

<div class="person-brief" data-bind="click: $root.myHandler">
...
</div>

一般提示:如果你选择后者,尽量少用jQuery(这通常是很可能的),最值得注意的是不要使用jQuery来操作DOM(除了在自定义绑定处理程序和渲染后函数中)。

相关问题