【问题标题】:Backbone Model set data for POST save用于 POST 保存的主干模型集数据
【发布时间】:2014-04-20 19:22:16
【问题描述】:

我在我的项目中使用 Backbone.Associatons。 这个库修改了 Backbone.Model 的 toJSON 方法。 我还自己修改了它,以便与我使用的模板引擎一起使用。

我现在基本上有一个嵌套 Backbone.Models 的大对象(或 JSON 对象,在 toJSON 调用之后)和一些附加属性。

当我编辑模型并使用 patch:true 选项调用 save() 方法时,我可以将数据作为 JSON 对象提供,并且仅将这些数据发送到服务器。

model.save(modelData, {patch: true});

但是,当我的模型是新的并且 Backbone 执行 POST 请求时,它会通过调用 toJSON 序列化我的模型的数据,即使我提供了一个数据对象作为 save 方法的第一个参数。

因此,发送到服务器的数据不被接受,因为它具有所有这些嵌套属性。

如何让 Backbone 在 POST 数据时使用自定义 toJSON 方法,或者如何让 Backbone 使用我在 save 方法的第一个参数中提供的数据?

【问题讨论】:

    标签: javascript json backbone.js


    【解决方案1】:

    也许解决方案不是很好,但是您可以将不会发送的数据移动到临时变量(如果以后需要的话)。

    //...
    // use silent if something is listening to `change` event
    var silent = { silent: true };
    var tmp = model.toJSON();
    model
      .clear(silent) // remove everything from the model
      .save({ foo: 'bar' });  // send only required data
    
    model
      .clear(silent)  // remove data that was sent
      .set(tmp, silent);  // set back initial data
    
    //...
    

    但可能与数据有冲突,来自保存后的响应

    【讨论】:

    • 我认为这不会。由于添加和修改模型属性的 toJSON 方法仍然像这样在 save 方法中调用,所以这并不能解决问题。我正在寻找一种方法来覆盖 save() 或 sync() 并提供不同的 toJSON 方法进行保存。
    • toJSON 实际上使用模型中的数据,这就是我在save 之前添加clear 的原因。还是您的意思是您的扩展 toJSON 会自动将其他属性添加到结果中?
    • 正是如此。当调用 toJSON 时,Backbone.Associations 也会修改属性。
    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2015-05-30
    相关资源
    最近更新 更多