Backbone.js 木偶异步模型获取未按预期工作
我遇到了一个奇怪的问题。我有一个木偶模块负责获取数据,它通过Backbone.js 木偶异步模型获取未按预期工作,backbone.js,asynchronous,coffeescript,marionette,Backbone.js,Asynchronous,Coffeescript,Marionette,我遇到了一个奇怪的问题。我有一个木偶模块负责获取数据,它通过主干.Wreqr请求/响应系统公开。对于我的项目,它看起来像这样(咖啡脚本): 对于该系列而言,这完全符合预期。数据被提取出来,当我把它传递给一个木偶.CompositeView视图时,视图被渲染得很好 我现在正在充实这些项目的细节页面,但一切都不顺利。当我通过实例化一个新模型来请求一个特定的模型时,currentProject=App.request'project:entity',project,然后将其传递给一个木偶。ItemVi
主干.Wreqr
请求/响应系统公开。对于我的项目,它看起来像这样(咖啡脚本):
对于该系列而言,这完全符合预期。数据被提取出来,当我把它传递给一个木偶.CompositeView
视图时,视图被渲染得很好
我现在正在充实这些项目的细节页面,但一切都不顺利。当我通过实例化一个新模型来请求一个特定的模型时,currentProject=App.request'project:entity',project
,然后将其传递给一个木偶。ItemView
,ItemView会在获取模型之前解析其模板,导致未捕获引用错误
,因为我的模板中的变量尚未声明。。。知道这是怎么回事吗
我的模板目前非常简单:
<script id="project_detail_template" type="text/template">
<h1>Hello world!</h1>
<p><%= title %></p>
</script>
你好,世界!
编辑:好的,显然我在这里做错了更多的事情,因为当我将这个模型注销到控制台时,它的所有属性都是它的
id
。如果有人能帮我找到正确的方向,那就太好了。您正在调用fetch
,然后立即返回项目
对象,而无需等待异步fetch
完成
不要返回project
对象,而是返回project.fetch()
,因为这将返回一个承诺。然后您可以。然后该值,确保其可用:
@App.module 'Entities', (Entities, App, Backbone, Marionette, $, _) ->
class Entities.Project extends Backbone.Model
urlRoot: '/api/project'
class Entities.ProjectsCollection extends Backbone.Collection
model: Entities.Project
url: '/api/projects.json'
API =
getProjectEntities: ->
projects = new Entities.ProjectsCollection
projects.fetch()
getProject: (project) ->
project = new Entities.Project({ id: project });
project.fetch()
App.reqres.setHandler 'project:entities', ->
API.getProjectEntities()
App.reqres.setHandler 'project:entity', (project) ->
API.getProject(project)
通过reqres打电话时,你会得到回复
App.request("project:entity", someId, function (promise){
// wait for the project to finish loading
$.when(promise).then(function(project){
// do stuff with your project, here
});
});
您正在调用fetch
,然后立即返回项目
对象,而无需等待异步fetch
完成
不要返回project
对象,而是返回project.fetch()
,因为这将返回一个承诺。然后您可以。然后该值,确保其可用:
@App.module 'Entities', (Entities, App, Backbone, Marionette, $, _) ->
class Entities.Project extends Backbone.Model
urlRoot: '/api/project'
class Entities.ProjectsCollection extends Backbone.Collection
model: Entities.Project
url: '/api/projects.json'
API =
getProjectEntities: ->
projects = new Entities.ProjectsCollection
projects.fetch()
getProject: (project) ->
project = new Entities.Project({ id: project });
project.fetch()
App.reqres.setHandler 'project:entities', ->
API.getProjectEntities()
App.reqres.setHandler 'project:entity', (project) ->
API.getProject(project)
通过reqres打电话时,你会得到回复
App.request("project:entity", someId, function (promise){
// wait for the project to finish loading
$.when(promise).then(function(project){
// do stuff with your project, here
});
});
我已经实现了这一点,但现在当我注销响应时,它只输出原始JSON,而不是实际的模型实例。。。我肯定我在这里遗漏了一个更大的概念……我在这里做了一个要点:哦,对了。很抱歉我忘了它没有从那个承诺中返回模型。你需要用自己的承诺来包装你的收获。这里的例子:我不知道那里发生了什么。。。我还在学习这一切。如果你有时间详细说明,我将不胜感激。还有:为什么这对我的收藏品有用,但对我的模型却不起作用?它们的处理方式不同吗?我已经实现了这一点,但现在当我注销响应时,它只输出原始JSON,而不是实际的模型实例。。。我肯定我在这里遗漏了一个更大的概念……我在这里做了一个要点:哦,对了。很抱歉我忘了它没有从那个承诺中返回模型。你需要用自己的承诺来包装你的收获。这里的例子:我不知道那里发生了什么。。。我还在学习这一切。如果你有时间详细说明,我将不胜感激。还有:为什么这对我的收藏品有用,但对我的模型却不起作用?他们的处理方式不同吗?