我已经启动了小型 ember 应用程序,我有以下观点:
Cellar.SearchTextField = Ember.TextField.extend({
insertNewline: function(){
Cellar.SearchController.loadResults();
}
});
和 Controller :
Cellar.SearchController = Ember.ArrayController.create({
content: [],
searchQuery: "",
loadResults: function() {
var me = this;
SC.get('/tracks', { q: me.get('searchQuery') }, function(tracks) {
me.set('content', []);
$(tracks).each(function(index, value){
var track = Cellar.Track.create({
id: value.id,
artwork: value.artwork_url,
download_url: value.download_url,
duration: value.duration,
stream_url: value.stream_url
})
me.pushObject(track);
});
});
}
});
和应用程序模板:
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container"></div>
<h3 class="logo">{{#linkTo "index"}}Cellar{{/linkTo}}</h3>
<form class="navbar-search">
{{view Cellar.SearchTextField placeholder="search" valueBinding="Cellar.SearchController.searchQuery"}}
</form>
</div>
</div>
</div>
<div id="content">
{{outlet}}
</div>
我的问题是,当我在路线 http://localhost:3000/
上时,我的 searchController
不起作用,但当 URL 为 时一切正常>http://localhost:3000/#/
,为什么?
最佳答案
Ember 默认使用基于哈希的路由。您可以通过重新打开路由器并切换到 HTML5 位置 api 来更改它。
App.Router.reopen({
location: 'history'
});
编辑:我认为这里存在版本不匹配的问题。这似乎是 ember 的旧版本。
在当前版本中,您无需手动创建 Controller 。您提供一个 Controller 并扩展
ArrayController
或ObjectController
。
您将不再拥有对 App.SearchController 的引用。您可以通过 {{action}}
帮助程序发送事件或调用 Controller 上的方法。
有很多差异,我建议给 Ember Getting Started Guide快速阅读以了解更改。
关于javascript - Ember.js 路由,无法访问 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17367619/