首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rivets.js -当模型更改时事件解除绑定

Rivets.js -当模型更改时事件解除绑定
EN

Stack Overflow用户
提问于 2015-09-01 11:20:02
回答 1查看 746关注 0票数 0

我在Rivets.js上遇到了一个奇怪的问题。我创建了jsfiddle 这里来总结这个问题。

如果您连续单击底部的两个按钮(“删除外部A",然后单击”删除内部5"),则一切正常工作。但是,如果您执行相同的操作,单击“外部A”文本框旁边的"Delete“按钮,然后单击"inner 5”文本框旁边的"Delete“按钮,代码会中断。在单击第一个按钮后检查第二个"Delete“按钮,会发现原来附加到第二个"Delete”按钮的clicked事件处理程序不再绑定。为什么当模型发生变化时事件处理程序“解除绑定”?

这是我的密码:

Javascript

代码语言:javascript
复制
// Create model
var myModel = [
    {
        "id" : "outer A",
        "inner" : [
            { "id" : "inner 1" },
            { "id" : "inner 2" }
        ]
    }, {
        "id" : "outer B",
        "inner" : [
            { "id" : "inner 3" },
            { "id" : "inner 4" },
            { "id" : "inner 5" }
        ]
    }
];

// Bind model to DIV using rivets
rivets.bind($('#sidebarDIV'), {myModel: myModel});

// Bind click handler: delete outer object
$('#deleteOuter_A').click(function(){
    console.log('delete outer');
    myModel.splice(0,1);
});

$('#deleteInner_5').click(function(){
    console.log('delete inner');
    myModel[0].inner.splice(2,1);
});

// Does not work
$('.deleteOuter').click(function(){
    console.log('delete outer');
    myModel.splice(0,1);
});

$('.deleteInner').click(function(){
    console.log('delete inner');
    myModel[0].inner.splice(2,1);
});

代码语言:javascript
复制
<div id="sidebarDIV">
    <div rv-each-sidebar="myModel" class="outerTab" rv-id="sidebar.id">
        <input rv-value="sidebar.id">
            <button class="deleteOuter">Delete</button>
            <div rv-each-inner="sidebar.inner" class="innerTab" rv-id="inner.id">
                <input rv-value="inner.id">
                <button class="deleteInner">Delete</button>
            </div>
            <br>
        </div>
    <button id="deleteOuter_A">Delete outer A</button>
    <button id="deleteInner_5">Delete inner 5</button>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-01 18:08:49

你的样品很奇怪,因为它看起来像预期的那样起作用了。

当您单击此按钮#deleteOuter_A时,您的代码将第一项从数组中拼接出来。这样做是正确的。

当您单击此按钮#deleteInner_5时,您的代码将第三个内部项与数组中的第一个项拼接。这样做是正确的。但是,您必须首先对数组中的第0‘项进行调味,因为该项.inner数组没有第三项。

当您单击此按钮.deleteOuter时,您的代码会将第一项从模型中剪接。它确实是这样。

当您单击此按钮.deleteOuter时,您的代码将第三项从模型第一项的内部数组中剪接。只有当数组中的第一项实际上有3项时,这才能工作。

如果这有帮助,请告诉我们。我要用这个回应来关闭这个github问题你打开。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32330288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档