Emberjs 核心有一个新的路由器实现,它扩展了 Ember.StateManager。这是我目前实现的基本路由器(使用coffeescript):
Emee.set "stateManager", Ember.Router.create
location: "hash"
enableLogging: true
start: Ember.State.extend
index: Ember.State.extend
route: "/"
connectOutlets: (manager) ->
console.log(manager)
tasks: Ember.State.extend
route: "/tasks"
index: Ember.State.extend
route: "/"
show: Ember.State.extend
route: "/show"
users: Ember.State.extend
route: "/users"
index: Ember.State.extend
route: "/"
Emee 是我的 Ember 命名空间。我有一些问题:
1) 当一个页面加载了一个带有哈希的 url 时,http://localhost:3000/#tasks
它会移动到正确的 start.tasks.index 状态,但在 hashChange 上它只是向当前状态的 routePath 发送一条消息。Emee.stateManager.route("/tasks") 也做同样的事情。它不会改变状态,而是向当前状态的 routePath 发送消息。我们需要自己实现 routePath 吗?如果不是,我们如何通过提供路线来改变状态?
2)我看到进入状态时将调用哪个函数的很多变化。截至目前,“connectOutlets”似乎是进入状态时调用的函数的名称。现在这是设置控制器的正确页面吗?
更新
将 ember 代码更新为最新版本。我的路由器现在看起来像这样:
Emee.Router = Ember.Router.extend
location: "hash"
enableLogging: true
root: Ember.State.extend
index: Ember.State.extend
route: "/"
redirectsTo: 'tasks.index'
tasks: Ember.State.extend
route: "/tasks"
index: Ember.State.extend
route: "/"
connectOutlets: (manager) ->
console.log("in index");
show: Ember.State.extend
route: "/show"
connectOutlets: (manager) ->
console.log("in show");
users: Ember.State.extend
route: "/users"
index: Ember.State.extend
route: "/"
Emee.initialize()
浏览器前进和后退按钮仍然不起作用。他们调用routePath
which 只是返回,因为它们都是叶节点。我想我错过了一些小东西,但我无法找到它。