Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery tmpl knockout.js单击不传递项_Jquery_Knockout.js_Jquery Templates - Fatal编程技术网

JQuery tmpl knockout.js单击不传递项

JQuery tmpl knockout.js单击不传递项,jquery,knockout.js,jquery-templates,Jquery,Knockout.js,Jquery Templates,我有一个简单的模板块: <script id="selectedCust" type="text/x-jquery-tmpl"> {{each people}} <div class="section" personid="${Personid}" > <div class="sectionActions"> <div> <a class="action" href="#" data-bind='

我有一个简单的模板块:

<script id="selectedCust" type="text/x-jquery-tmpl">
{{each people}}
<div class="section" personid="${Personid}" >
    <div class="sectionActions">
        <div>
           <a class="action" href="#" data-bind='click: removePerson'>Remove</a>
        </div>
   </div>
</div>
{{/each}}
</script>

{{每个人}}
{{/每个}}
简单HTML块:

<div id="customersArea" data-bind="template: 'selectedCust'">
</div>

使用击倒js:

 function viewModel() {
            var self = this;
            self.people = ko.observableArray();
            self.removePerson = function (person, ev) {
                self.people.remove(person);
            };
            self.setPeople = function (ppl) {
                var len = ppl.length;
                for (var i = 0; i < len; i++) {
                    this.people.push(ppl[i]);
                }
            };
        }

    var mainViewModel = new viewModel();
    ko.applyBindings(mainViewModel, $("#customersArea")[0]);
函数viewModel(){
var self=这个;
self.people=ko.observearray();
self.removePerson=功能(个人,ev){
自我。人。移除(人);
};
self.setPeople=功能(ppl){
var len=ppl.长度;
对于(变量i=0;i
我可以设置人员并查看数据绑定,但是当调用removePerson时,人员参数始终是mainViewModel,而不是实例。当我尝试$root.remove时,我会得到相同的结果,但尝试$parent.remove我会得到$parent是未定义的

如果不使用ev参数,我做错了什么

添加Includes(按顺序),#selectedCust块可以在this之后,也可以在knockout.js之后,它仍然会在$parent上出错:

<script src="/Scripts/jquery-1.7.1.js" type="text/javascript"></script>
<script src="/Scripts/modernizr-2.0.6-development-only.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="/Scripts/jQuery.tmpl.min.js" type="text/javascript"></script>
<script src="/Scripts/knockout-2.0.0.js" type="text/javascript"></script>
<script src="/Scripts/jquery-ui-1.8.16.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery-blockUI.js" type="text/javascript"></script>

我刚刚将其更改为ko.js的模板:

<div class="section" data-bind="attr: { 'personid': PersonId }" >
    <div class="sectionActions">
        <div><a class="action" href="#" data-bind='click: $parent.removePerson'>Remove</a></div>
    </div>
</div>

这就行了。。。那么这是使用tmpl进行敲除的问题吗?

您尝试过这个吗

<div><a class="action" href="#" data-bind='click: $parent.removePerson'>Remove</a></div> 

根据淘汰文档“note1”,在循环中需要在其前面加上$parent

编辑 顺便说一句,我想在这里分享一下:

“请注意,截至2011年12月,jQuery.tmpl不再处于积极开发中。在适当的时候,它将被JsRender取代,而JsRender目前还没有进入测试阶段。”

我马上看到的一个问题是,类为“section”的div缺少结束“div”标记。我怀疑这是在DOM中创建了格式不正确的对象。

我已经尝试过了,并得到了一个“未捕获引用错误:$parent is not defined”,您可以发布您的javascript包含吗?在更详细地了解了这一点之后,您是否有理由使用jquery.tmpl?基本上,您无法访问${personid}以将其发送回viewModel。基本上,它可以很好地用于显示,但如果你想用它做其他事情,它就不起作用了。我试图以这种方式使用它,单击:function(){mainViewModel.removePerson(this)},但它会发送整个viewModel对象。我想说jquery.tmpl在这种情况下不起作用。我添加了一个链接,说从2011年12月起jquery.tmpl不再被开发。我想使用一个系统,如果我不想继续被淘汰,我可以将jquery硬编码到模板中。这很糟糕,因为如果你转到JsRender页面,它已经4个月没有被触动了。