首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在视图中呈现模型

在视图中呈现模型
EN

Stack Overflow用户
提问于 2013-05-04 09:26:20
回答 1查看 119关注 0票数 0

我是第一次拿起backbone,我在获得我的视图来呈现我的集合时遇到了一些问题。

main.js

代码语言:javascript
复制
/*global require*/
'use strict';

require.config({
    shim: {
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: [
                'underscore',
                'jquery'
            ],
            exports: 'Backbone'
        },
    },
    paths: {
        app: 'app',
        jquery: '../components/jquery/jquery',
        backbone: '../components/backbone-amd/backbone',
        underscore: '../components/underscore-amd/underscore',
        competitions: 'collections/competition-collection',
        competitionModel: 'models/Competition-model',
        templates: 'templates'
    }
});

require([
    'backbone',
    'app',
    'competitions',
    'competitionModel',
    'views/competition-view',
    'templates'
], function (
    Backbone,
    App,
    Competitions,
    CompetitionModel,
    CompetitionsView
    ) {
        window._app = new App(
            Competitions,
            CompetitionModel,
            CompetitionsView
        );

        window._app.demoData();
        window._app.start();
});

app.js

代码语言:javascript
复制
define([], function() {

    var App = function(Competitions,CompetitionModel,CompetitionsView) {
        // Our models will be instantiated later as needed later.
        this.Models.CompetitionModel = CompetitionModel;
        this.Collections.Competitions = Competitions;
        this.Collections.competitions = new Competitions();
        this.Views.competitionsView = new CompetitionsView();


        //console.log(this.Views.competitionsView)
    };
    App.prototype = {
        Views: {},
        Models: {},
        Collections: {},
        start: function() {

            this.Views.competitionsView.render();
            Backbone.history.start();
        },
        // TODO: We'll get rid of this or move later ... just "spiking" ;)
        demoData: function() {
            var me = new this.Collections.Competitions(
                [
                    {
                        name: 'Some Name',
                    },
                    {
                        name: 'Other Name',
                    }
                ]
            );

            console.log("***** Demo Competitions Created *****");
        }
    };
    return App;
});

Competition-model.js

代码语言:javascript
复制
define([
    'underscore',
    'backbone',
], function (_, Backbone) {
    'use strict';

    var CompetitionModel = Backbone.Model.extend({
        defaults: {
        },
        initialize: function(){
            console.log(this.attributes);
        }
    });
    this.listenTo(Competitions, 'add', function(){
        console.log("bla")
    });
    return CompetitionModel;
});

competition-collection.js

代码语言:javascript
复制
define([
    'underscore',
    'backbone',
    'models/competition-model'
], function (_, Backbone, CompetitionModel) {
    'use strict';

    var CompetitionCollection = Backbone.Collection.extend({
        model: CompetitionModel
    });

    return CompetitionCollection;
});

competition-view.js

代码语言:javascript
复制
define([
    'jquery',
    'underscore',
    'backbone',
    'templates',
    'competitions',
], function ($, _, Backbone, JST, Competitions) {
    'use strict';

    var CompetitionView = Backbone.View.extend({
        template: JST['app/scripts/templates/competition.ejs'],
        render: function() {
            console.log(this.model);
          }
    });
    console.log("yo")


    return CompetitionView;
});

我知道模型已正确加载,但我似乎不知道如何将模型集合传递给视图并呈现所有对象。

有人能帮上忙吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-04 11:48:08

您已正确创建了视图、集合和模型,但尚未在集合和视图之间创建链接。您需要将集合传递给视图,并在视图中使用该集合来呈现所有模型。

在您的app.js更换中:

代码语言:javascript
复制
this.Views.competitionsView = new CompetitionsView();

通过以下方式:

代码语言:javascript
复制
this.Views.competitionsView = new CompetitionsView({collection: this.Collections.competitions});

现在,您在视图中有了集合对象的引用。现在内部竞争-view.js替换:

代码语言:javascript
复制
console.log(this.model);

通过以下方式:

代码语言:javascript
复制
this.collection.each(function (model) {
    console.log(model);
});

另外,在您的app.js中,在启动函数内部,您正在调用Backbone.history.start(),而没有创建主干路由器,这也会给出一个控制台错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16369699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档