EmberJs路由

时间:2014-06-10 18:00:53

标签: ember.js requirejs

我正在尝试创建EmberJs / RequireJs应用程序并遇到问题。根据示例,我将app.js定义为:

(function () {
define(['../app/routing'], function (routing) {
    return {
        Router: routing,
        LOG_TRANSITIONS: true
    };
});
}());

,routing.js as:

(function (root) {
    define(["ember"], function (Ember) {
        var router = Ember.Router.extend({
            todosRoute: Ember.Route.extend({
                viewName: 'todos',
                model: function(){
                    return this.todos.find('todos');
                }
            })
        });
        return router;
    });
}(this));

和main.js:

require(['app', 'ember'], function(app, Ember){
            var app_name = config.app_name || "app";
            root[app_name] = app = Ember.Application.create(app);

我遇到的问题是,无论我如何定义我的路线,我都无法让它们发挥作用,emberJs也报告说这些路线不存在。

如何定义路由并将它们作为参数对象传递给Application.create(obj)?如果可能的话,我仍然希望将它们保存在单独的文件中。 请注意,routing.js应该在main.js之前执行,因此App对象不可用,就像在教程中建议的那样

2 个答案:

答案 0 :(得分:4)

JS / app.js

App = Ember.Application.create();

App.Router.map(function() {

  this.route('index', {
    path: '/'
  });

  this.route('about');

});

App.IndexRoute = Ember.Route.extend({
  //
});

我知道您希望将这些内容整合到不同的文件中,但是您是否能够在简单的环境中工作?

至于需要JS的东西......我对此并不了解 - 但这里似乎有一个主题:Ember.js and RequireJS触及它的底部。

答案 1 :(得分:2)

让你的router.js文件看起来像这样:

(function (W) {
'use strict';

define([
    'ember'
], function (Ember) {
    var Router;
    Router = Ember.Router.extend();

    Router.map(function () {
        var _this = this;

        _this.route('index', {path: '/'});
        _this.route('todos', {path : '/todos/'});
    });
    return Router;
});

})(window);

对于单个路线,请添加新文件。

(function (W) {
'use strict';

define([
    'ember',
    'models/todosModel'
], function (Ember, TodosModel) {
    var TodosRoute;

    TodosRoute = Ember.Route.extend({
        model: function () {
                       return TodosModel;
        }
    });

    return TodosRoute;
});

})(window);

将各个路线添加到app.js返回的对象。