您可以在車把模板中爲account
定義屬性綁定。 這種結合是這樣的:
<script type="text/x-handlebars">
<h1>App</h1>
{{#each item in controller}}
{{#view App.AccountView accountBinding="item"}}
<a {{bindAttr href="view.account.url"}} target="_blank">
{{view.account.name}}
</a>
{{/view}}
{{/each}}
</script>
請注意,我說accountBinding
,所以一般的規則是propertyName
和Binding
作爲後綴。請記住,當您將某個媒體資源添加到視圖時,您將無法直接訪問該媒體資源,而必須使用view.propertyName
才能訪問該媒體資源,如上所示。
只要記住使用{{view}}
幫手時,你必須有一個View
類:
window.App = Em.Application.create();
App.AccountView = Em.View.extend(); // this must exist
App.ApplicationRoute = Em.Route.extend({
model: function() {
return [
{id: 1, name: 'Ember.js', url: 'http://emberjs.com'},
{id: 2, name: 'Toronto Ember.js', url: 'http://torontoemberjs.com'},
{id: 3, name: 'JS Fiddle', url: 'http://jsfiddle.com'}];
}
})
工作小提琴:http://jsfiddle.net/schawaska/PFxHx/
在應對更新1:
我發現我自己在類似的情況下,並最終創建一個子視圖來模仿{{linkTo}}
幫手。我不知道/認爲這是最好的實施方法。 你可以看到我以前的代碼在這裏:http://jsfiddle.net/schawaska/SqhJB/
在我創造了ApplicationView
內的孩子認爲,時間:
App.ApplicationView = Em.View.extend({
templateName: 'application',
NavbarView: Em.View.extend({
init: function() {
this._super();
this.set('controller', this.get('parentView.controller').controllerFor('navbar'))
},
selectedRouteName: 'home',
gotoRoute: function(e) {
this.set('selectedRouteName', e.routeName);
this.get('controller.target.router').transitionTo(e.routePath);
},
templateName: 'navbar',
MenuItemView: Em.View.extend({
templateName:'menu-item',
tagName: 'li',
classNameBindings: 'IsActive:active'.w(),
IsActive: function() {
return this.get('item.routeName') === this.get('parentView.selectedRouteName');
}.property('item', 'parentView.selectedRouteName')
})
})
});
和我把手看起來像這樣:
<script type="text/x-handlebars" data-template-name="menu-item">
<a {{action gotoRoute item on="click" target="view.parentView"}}>
{{item.displayText}}
</a>
</script>
<script type="text/x-handlebars" data-template-name="navbar">
<ul class="left">
{{#each item in controller}}
{{view view.MenuItemView itemBinding="item"}}
{{/each}}
</ul>
</script>
我對不起,我不能給你一個更好的答案。這是我當時所能想到的,從此以後一直沒有觸及它。就像我說的,我不認爲這是處理它的方法。如果你願意看看{{linkTo}}
helper source code,你會看到一個模塊化和優雅的實現,可能是你自己實現的基礎。我猜你正在尋找的部分是被像這樣定義的href
屬性:
var LinkView = Em.View.extend({
...
attributeBindings: ['href', 'title'],
...
href: Ember.computed(function() {
var router = this.get('router');
return router.generate.apply(router, args(this, router));
})
...
});
所以我想,從那裏你可以理解它是如何工作和實施自己的東西。讓我知道這是否有幫助。
這開始變得更有意義,但它仍然沒有解決我如何讓鏈接工作......也許是因爲我沒有提供足夠的前期信息。你介意看更新1嗎? – commadelimited 2013-02-26 16:46:51