【问题标题】:Backbone JS save functionalityBackbone JS 保存功能
【发布时间】:2014-07-15 16:00:52
【问题描述】:

我已经为我的项目编写了一个 Rails 后端,当您保存或创建新记录时,状态为 200 和已保存帖子的 json 表示。

当我在 bacbone 中执行以下操作时:

   modelObject = new App.Models.Post();
   modelObject.set({title: 'asdasdas', content: 'asdadasdasdasdasd'});

   if (modelObject.isValid()){
     modelObject.save().then( ... )
   }

如何获取返回的 post 对象? (假设发帖成功)。

在 Rails 方面,当我执行 @post.save 时,我也会在创建操作中成功保存时渲染 json: @post, status: 200,因此返回一个 json 对象,我只是知道如何在主干端访问它.

【问题讨论】:

    标签: javascript ruby-on-rails json backbone.js


    【解决方案1】:

    backbone docs 描述了调用save() 函数后如何从服务器获得响应的几种方法。 例如:

    您需要指定errorsuccess 回调:

    var model = new App.Models.Post();
    model.set({title: 'some title', content: 'some content'});
    var options = {
        success: function(model, response){
            console.log('success handler');
            model.set({id: response.id});
        },
        error: function(model, xhr){
            console.log('error handler');
        }
    };
    

    指定 wait 选项以在设置模型属性之前等待来自服务器的响应:

    options.wait = true;
    

    需要使用指定选项调用save函数:

    if (model.isValid()) {
        model.save({}, options);
    }  
    

    【讨论】:

      【解决方案2】:

      modelObject.save() 调用将返回一个 promise 对象。您应该链接一个 .done() 调用并将其传递给一个函数,如下所示:

      modelObject.save().done(function(e) {
        // handle your response here
      });
      

      您也可以使用 .fail() 函数以同样的方式处理故障。像这样将它们链接在一起:

      modelObject.save().done(function(e) {
        // handle your response here
      }).fail(function(e) {
        // handle failure here
      });
      

      这是编写相同代码的另一种方法:

      var promise = modelObject.save();
      promise.done(function(e) {
        // handle your response here
      });
      promise.fail(function(e) {
        // handle failure here
      });
      

      还有一个 .always() 可以链接到始终被调用:

      var promise = modelObject.save();
      promise.done(function(e) {
        // handle your response here
      });
      promise.fail(function(e) {
        // handle failure here
      });
      promise.always(function(e) {
        // always call this on success or failure
      });
      

      【讨论】:

      • 这并没有真正回答我如何获得通过成功保存返回的 post json 的问题。它帮助我写得更好,但不能帮助我理解“这就是你如何获得返回的 post json ......”部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2017-01-15
      • 1970-01-01
      • 2012-12-18
      • 2019-03-25
      相关资源
      最近更新 更多