Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用模型数据获取或实例化主干模型后运行代码_Javascript_Backbone.js_Backbone Model - Fatal编程技术网

Javascript 使用模型数据获取或实例化主干模型后运行代码

Javascript 使用模型数据获取或实例化主干模型后运行代码,javascript,backbone.js,backbone-model,Javascript,Backbone.js,Backbone Model,如果一个模型是用它的所有数据构造的,那么在初始化过程中运行一些代码的干净方法是什么,而不是在获取之后才运行这些代码?我所拥有的最好的东西如下所示,但我希望有一种更精简的方式: if (this.hasData()) { this.setupListeners(); } else { this.fetch().done(this.setupListeners); } 或者可能是以下内容,尽管阅读时意图并不十分明显: var whenLoaded = (this.hasData()

如果一个模型是用它的所有数据构造的,那么在初始化过程中运行一些代码的干净方法是什么,而不是在获取之后才运行这些代码?我所拥有的最好的东西如下所示,但我希望有一种更精简的方式:

if (this.hasData()) {
    this.setupListeners();
} else {
    this.fetch().done(this.setupListeners);
}
或者可能是以下内容,尽管阅读时意图并不十分明显:

var whenLoaded = (this.hasData()) ? $.Deferred().resolve() : this.fetch();
whenLoaded.done(this.setupListeners);
后台故事:模型本身执行一些listenTo调用,以便在发生某些更改时保存自己。但是如果模型需要抓取,则在抓取完成之前不应创建listenTos,否则一旦抓取了数据,随后的集合将触发更改事件,从而对服务器进行不必要的保存


有没有更干净的方法?或者这是最好的,我很挑剔。谢谢您的想法。

您的意思是,您正在模型本身中实现自动保存?这听起来像是一种反模式。您已经消除了调用方的工作单元可用性,这些调用方可能需要进行多次更改,并在适合其所处的上下文时进行保存。您可以在模型上使用自定义事件将数据保存到服务器。@CrescentFresh,是的,我已经实现了自动保存。我通常会同意你的看法,但对于这种特殊的模型,我认为这是有意义的,因为a这些属性一次只更新一个,但这次批量提取除外,b我对保存调用进行去抖动处理,所以如果我们一次更改几个,那么只执行一个保存。@Cameron:听起来你已经想得很透彻了。问:您的示例代码是否直接进入构造函数体?