更改_id后,骨干视图未初始化新模型

时间:2017-10-17 14:52:41

标签: node.js express backbone.js

我需要在删除数据库条目并在服务器端创建另一个_id的新模型后初始化新模型。浏览器使用新的id重定向到网址,但没有获取新值,也没有刷新页面,只有在您导航到另一个页面然后导航回来之后,它才有效。

  app.Details = Backbone.Model.extend({
    idAttribute: '_id',
    defaults: {
      success: false,
      errors: [],
      errfor: {},
      name: ''
    },
    url: function() {
      return '/admin/account-groups/'+ app.mainView.model.id +'/';
    },
    parse: function(response) {
      if (response.accountGroup) {
        app.mainView.model.set(response.accountGroup);
        delete response.accountGroup;
      }

      return response;
    }
  });

  app.DetailsView = Backbone.View.extend({
    el: '#details',
    events: {
      'click .btn-update': function(e) {
        this.update(e);
        // try to initialize new view here recursively...
        this.initialize(e);
        this.syncUp(e);
        this.render(e);
      }
    },
    template: Handlebars.compile( $('#tmpl-details').html() ),
    initialize: function() {
      this.model = new app.Details();
      this.syncUp();
      this.listenTo(app.mainView.model, 'change', this.syncUp);
      this.listenTo(this.model, 'sync', this.render);
      this.render();
    },
    syncUp: function() {
      this.model.set({
        _id: app.mainView.model.id,
        name: app.mainView.model.get('name')
      });
    },
    render: function() {
      this.$el.html(this.template( this.model.attributes ));

      for (var key in this.model.attributes) {
        if (this.model.attributes.hasOwnProperty(key)) {
          this.$el.find('[name="'+ key +'"]').val(this.model.attributes[key]);
        }
      }
    },
    update: function() {
      this.model.save({
        name: this.$el.find('[name="name"]').val()
      });
      this.delete();
    },
    delete: function() {
      this.model.destroy({
        success: function(model, response) {
          if (response.success) {
            location.href = '/admin/account-groups/' + app.mainView.model.get('name') + '/';
          }
          else {
            app.deleteView.model.set(response);
          }
        }
      });
    }
  });

因为_id是不可变的,所以必须应用2种方法,如何与客户端同步?

如果有人熟悉Backbone算法的示例或全局模式来处理app.putapp.delete,那将非常有用,因为我不确定触发递归主干是否正确某些事件的功能。

修改 此问题不是重定向返回双重路由的上一个问题的重复。这里的问题是关于模型的非初始化(不在渲染中的字段中获取值)

0 个答案:

没有答案