微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-events – Backbone.js模型的destroy方法不会触发成功或错误事件

我开始学习Backbone.js,我从 this boilerplate开始,通过从磁盘上的静态文件加载JSON数据并在html表中显示它来做一个例子.

然后我尝试在一个按钮上绑定一个事件,该按钮应该从集合中删除一个元素,然后从DOM中删除.事情很好,点击触发了destroy方法,在集合上触发了remove事件,但是没有任何东西来自destroy的成功或错误回调

有人有线索吗?

该模型 :

define([
  'underscore','backbone'
],function(_,Backbone) {
  var memberModel = Backbone.Model.extend({
    url: "/members.json",defaults: {
      email: "",firstname: "",lastname: "",gender: "",language: "",consent: false,guid: "",creationDate: ""
    },initialize: function(){
    }

  });

  return memberModel;

});

风景 :

define([
  'jquery','underscore','backbone','mustache','collections/members','text!templates/members/page.html'
],function($,_,Backbone,Mustache,membersCollection,membersPageTemplate){
  var membersPage = Backbone.View.extend({
    el: '.page',initialize: function(){
        this.members = new membersCollection();

        this.members.on('remove',function(){
                // works fine
            $('.members-body tr').first().remove();
            console.log('removed from collection');
        });
    },render: function () {
        var that = this;

        this.members.fetch({success: function(){

            var wrappedMembers = {"members" : that.members.toJSON()};

            that.$el.html(Mustache.render(membersPageTemplate,wrappedMembers));

            $('#delete-member').click(function(){
                that.members.at(0).destroy({ 
                        // prints nothing!!!
                    success: function(){ console.log('sucess'); },error: function(){ console.log('error'); }
                });

            });

        }});

    }
  });
  return membersPage;
});

解决方法

我同意这很奇怪.我不完全确定发生了什么,但这是我怀疑的……

您的Destroy()调用未返回有效的JSON.

>看着萤火虫,小提琴手,或其他什么,你的破坏()反应是什么样的?
>我也很好奇当你的删除点击功能被触发时是什么.
> destroy是否返回false或jqXHR对象?

骨干有点断开(至少我起初对我而言).在调用destroy()或fetch / save时,调用是异步的.通话结束后,立即触发删除事件,您的收藏可以响应.但是,在文档中深入挖掘,另一个事件被激活了删除的确认:

and a “sync” event,after the server has successfully ackNowledged the model’s deletion

所以你的收藏是基于删除成功的假设.如果您希望收藏集响应已确认的删除,请查找同步事件.

这留下了一个唠叨点 – 为什么你的错误处理程序没有被解雇?好吧,回调旨在响应删除的确认.但我敢打赌,JS调用堆栈不知道如何解释它返回的响应,作为成功或错误.你可能偶然发现了AJAX的现实.我发现在backbone,jquery和其他一些框架中你可以混淆ajax错误处理.谷歌“jquery ajax错误未被调用”,你会发现许多不同的场景,其中没有触发错误事件.

UPDATE

来回评论后……发生了两件事.首先,您的模型被视为“新”,这意味着对Destroy()的调用不会产生服务器请求.因此,您的成功/错误不会触发.见this commit.

话虽如此,我认为你不认为你的模型是新的(没有持久到服务器).你需要做两件事之一.要么在模型映射中包含名为id OR的属性,请将模型ID(我假设为guid)添加到模型的ID中.通过将以下行应用于您的模型,可以轻松进行映射:idAttribute:“guid”.你可以在idAttribute here上看到更多.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高