我的 Ember.js 应用程序的设置大致如下:
路由器:
App.Router.map ->
@resource('site', { path: '/' }, ->
@resource('dashboard')
@resource('account')
@resource('pages', { path: '/:page_slug'}))
路线:
App.ApplicationRoute = Ember.Route.extend
model: ->
return App.Site.find(1)
App.PagesRoute = Ember.Route.extend
model: (params)->
return App.Page.find(params.page_slug)
编辑:
控制器(JS不是咖啡):
App.PagesController = Ember.ObjectController.extend({
needs: 'ApplicationController',
...
});
我有一个 ApplicationController 和一个 PagesController。当我在一个页面上时,我想调用一个动作来删除当前页面。如果我将它放在 PagesController 中,它可以正常工作,但是在我刷新页面之前,ApplicationView 中包含页面列表的导航菜单不会更新。所以...我假设我需要将操作放在 ApplicationController 中并添加needs: ['ApplicationController']
到我的 PagesController 中。
但是,当我这样做时,我的 Pages 模板中的所有内容都会消失。
我的{{outlet}}
应用程序模板中有一个,站点模板中有另一个,它最终显示页面模板。是的,很复杂,我知道并且可能有更好的方法来做到这一点,所以任何建议都将不胜感激。哦,顺便说一句,我是一个真正的 Ember.js 新手,所以需要明确说明示例。(用蜡笔画出漂亮的颜色实际上是理想的。)
提前感谢您的帮助。
这是刷新问题。在根资源site
中,我正在加载一个Site
模型,Rails 后端使用发送的 url 返回该模型。最终,这个应用程序将与多个域一起使用,并且每个域都将为其自己的网站提供服务(大致基于 WP-多站点概念)。然后在pages
路线中,我根据其slug
属性加载站点的一页。这一切都很好。所以,现在我想让用户能够根据需要添加和删除页面。
所以,问题是这样的。当我在该PagesController
级别删除页面时,该页面删除得很好,但 ApplicationController 没有得到通知。即,我的导航菜单:
<ul class="left">
{{#each page in page}}
<li>{{#link-to 'pages' page.slug}}{{page.menu_name}}{{/link-to}}</li>
{{/each}}
<li id="add-page-button"><a data-tooltip title="Click here to add a new page to your site." href="#" data-reveal-id="addPageModal" data-reveal>+</a></li>
</ul>
不会收到缺少页面的通知,因此不会通过从列表中删除该页面来更新导航菜单。添加工作正常,导航列表在添加新页面时更新,但我在这样的ApplicationController
级别上这样做:
addNewPage: ->
# Get the site
site = @get('model')
# Get all the pages associated with the site
pages = site.get('page')
title = this.get('newTitle')
if (!title.trim())
return
slug = this.get('newSlug')
if (!slug.trim())
return
menu_name = this.get('newMenuName')
if (!menu_name.trim())
return
# Create a new page passing in our title, slug and menu_name
pages.create({title: title, slug: slug, menu_name: menu_name})
# Save the pages
pages.save()
if (pages.isError)
console.log(pages.errors)
else
@set('newTitle', '')
@set('newSlug', '')
@set('newMenuName', '')
$('#addPageModal').foundation('reveal', 'close')
这是我的deletePage
代码PagesController
(对不起,我混合了 JS 和 CoffeeScript):
deletePage: function (slug) {
var page = this.get('model');
this.get('ApplicationController').deletePage(page);
this.toggleProperty('isEditingTitle');
this.toggleProperty('isShowingDeleteConfirmation');
this.transitionToRoute('site.index');
}
当我尝试这个时,Ember 相当有帮助地让我知道我需要添加needs
,但是当我这样做时,我的 Pages 模板是空白的。
哦,是的,我什至尝试target
在调用deletePage
操作的按钮上设置属性。
我意识到我需要做的是以某种方式访问我的Site
模型PagesController
,但我应该如何去做。
这篇文章具有史诗般的比例。对于那个很抱歉。再次感谢任何帮助。