我正在创建一个Ember应用程序,作为从服务器返回的一些HTML的附加组件。我需要这个HTML,这样网站可以被搜索引擎索引,也可以加速用户的初始页面呈现。
因此,我的应用程序由几个Ember视图组成,附加到服务器生成的HTML的不同DOM元素。我不为路线使用主模板,所以我将每条路线的renderTemplate函数设置为什么都不做。
我的Ember应用程序绑定到body元素,我可以成功地将自定义视图附加到树下的元素。它的工作原理:
In this JSFiddle three last elements of the list are appended by Ember升
但当我尝试在模板中使用linkTo助手时,我遇到了一个错误:
Uncaught TypeError: Cannot read property 'container' of null ember-latest.js:32224
其在该功能中:
router: Ember.computed(function() {
return get(this, 'controller').container.lookup('router:main');
}),
In this JS fiddle I just add linkTo to the template, and it breaks everything
1.通常,Ember可以这样工作吗?在服务器呈现的HTML上分散许多视图?
1.如何修复示例代码?
2条答案
按热度按时间gfttwv5a1#
我把你的小提琴修好了,看看。
看来你是Ember的初学者,
所以这里有一些提示给你,
1.您应该有一个
application
模板,它将是根模板,所有模板都将在该模板上呈现。1.您不应该使用
this.container.lookup
访问views
,这仅用于调试。1.您不应该将
views
附加到DOM,这是框架的工作。1.默认情况下,您的应用程序将被附加到html的正文中,如果您希望它被附加到其他地方,请在创建
application
时提供rootElement
属性。有关配置application
的信息,请参阅here。rootElement可以是DOM元素或jQuery兼容的选择器字符串。请注意,在根元素之外附加到DOM的视图将不会接收事件。如果您指定了自定义根元素,请确保只在其中添加视图!
1.不要像
App.itemsController.set("content", model)
那样全局访问任何控制器,如果要访问路由内的另一个controller
,请使用this.controllerFor
;如果要访问另一个n10o1p内的控制器,请使用m2 11o1p。1.您无需创建任何类似
App.itemsController=Ember.ArrayController.extend({}).create();
的控制器示例框架将处理所有这些问题。
s1ag04yj2#
我发现我还需要将视图和容器绑定在一起才能使这个提琴工作
因此,得到的工作代码片段如下:http://jsfiddle.net/ddegtyarev/6cBRx/6/
再次,让我重申,我正在构建一个混合的Ember应用程序——也就是说,我有一些HTML从服务器直接返回,还有一些由多个Ember视图在多个位置附加。这就是为什么我必须手动创建视图并将其与控制器等绑定。