javascript - 内部主干模型方法并从服务器更新
问题描述
我有一个名为“项目”的简单主干模型。
我想添加一个方法 .open
此方法将调用一个 REST api,它将更改一些属性(并且我收到新的 json)。
有没有办法从响应中更新当前模型?这种方法正确吗?
var project = Backbone.Model.extend({ ...
open: function() {
... // request to the server and update the current object... //
}
...
}
解决方案
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'
});
推荐阅读
- java - 休眠 java.lang.ClassCastException [Ljava.lang.Object; 不能投到我的班级
- xml - 修改 XML 标记(属性的值)XSLT 1.0
- spring-boot - 应用程序以外的其他端点上的 sprinboot /health
- clickhouse - clickhouse-client :非常高的内存使用率
- html - 第一个单词的 XPath?
- mysql - System.NullReferenceException: '对象引用未设置为对象的实例。怎么修
- go - 是否可以使用 Viper 将前缀的 env 值列表映射到地图中?
- ag-grid - 跨页面重新加载保存 ag-grid 过滤器模型
- javascript - 在使用 tabindex="0" 围绕它的 div 包装器后,按下输入锚标记不起作用
- javascript - 从常规 TS 文件应用特定的 TSLint 规则