首页 > 解决方案 > 内部主干模型方法并从服务器更新

问题描述

我有一个名为“项目”的简单主干模型。

我想添加一个方法 .open

此方法将调用一个 REST api,它将更改一些属性(并且我收到新的 json)。

有没有办法从响应中更新当前模型?这种方法正确吗?

var project = Backbone.Model.extend({ ...

open: function() {
... // request to the server  and update the current object... //
}

...
}

标签: javascriptmodel-view-controllerbackbone.js

解决方案


Backbone.Model 已经有一个fetch函数。这可以使 REST 调用“获取”数据,并在成功时自动更新模型的属性。该fetch函数需要一个url,可以为每次调用传入,或在模型上定义。请参见下面的示例。

此外,使用fetch将有额外的好处。示例:来自获取文档

如果服务器的状态与当前属性不同,则触发“更改”事件。

这意味着您可以根据需要向此模型的事件添加侦听器。一种常见的模式是重新渲染模型“更新”的视图。

此外,将通过模型的functionfetch自动运行响应,如果您希望模型上的数据结构与 REST 调用中的数据结构不同,这将很有用。parse

例子:

var Project = Backbone.Model.extend({
  url: 'my-url/to-rest-call', // defined on model
  parse: function(resp) {
    // by default, returns resp only
    // Doing this sets model attributes to resp.data object
    return resp.data;
  }
});
var project = new Project();
// runs myView's render function if updated
myView.listenTo(project, 'update', myView.render);

// now fetch using url defined on model
project.fetch();
// OR passed with call
project.fetch({
  url: 'my-other-url/to-rest-call'
});

推荐阅读