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
Backbone.js 木偶异步模型获取未按预期工作_Backbone.js_Asynchronous_Coffeescript_Marionette - Fatal编程技术网

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,而不是实际的模型实例。。。我肯定我在这里遗漏了一个更大的概念……我在这里做了一个要点:哦,对了。很抱歉我忘了它没有从那个承诺中返回模型。你需要用自己的承诺来包装你的收获。这里的例子:我不知道那里发生了什么。。。我还在学习这一切。如果你有时间详细说明,我将不胜感激。还有:为什么这对我的收藏品有用,但对我的模型却不起作用?他们的处理方式不同吗?