我已经搜索,我已经尝试了不同的选择器,但我不能弄清楚这一点。我下面的教程,但我没有得到一个结果。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>
1条答案
按热度按时间7uzetpgm1#
对于KnockoutJS,您应该使用the
click
binding(或者theevent
binding),而不是使用jQuery来手动操作DOM。类似于下面的代码:
由于
myHandler
非常简单,您也可以内联goToDetails
代码,它可以从闭包访问vm
。在视图中绑定如下:
一般提示:如果你选择后者,尽量少用jQuery(这通常是很可能的),最值得注意的是不要使用jQuery来操作DOM(除了在自定义绑定处理程序和渲染后函数中)。