【问题标题】:EmberJs routingEmberJs 路由
【发布时间】:2014-06-10 18:00:52
【问题描述】:

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

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

,routing.js 为:

(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 对象不可用,如教程中建议的那样

【问题讨论】:

标签: ember.js requirejs


【解决方案1】:

js/app.js

App = Ember.Application.create();

App.Router.map(function() {

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

  this.route('about');

});

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

我知道您会希望将这些全部提取到不同的文件中,但是您是否能够在一个简单的环境中完成工作?

至于 Require JS 的东西...我对此不太了解 - 但这里似乎有一个线程:Ember.js and RequireJS 深入了解它。

【讨论】:

    【解决方案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 返回的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 2013-01-26
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多