Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js导航控制器-我的路径正确吗?_Javascript_Ember.js - Fatal编程技术网

Javascript Ember.js导航控制器-我的路径正确吗?

Javascript Ember.js导航控制器-我的路径正确吗?,javascript,ember.js,Javascript,Ember.js,我目前正在构建一个供内部使用的报告平台,并决定使用Ember.js。到目前为止,这是一个好的和坏的经验;坏的方面主要与文档有关,以及我在网上研究的大多数东西是如何随着最新版本的ember而改变的 我们正在使用twitter引导,引导的导航部分在li元素上有active类,而不是a元素。当然,我的第一个倾向是将jquery作为一种攻击,手动更改活动类,这感觉完全错误,并决定找到“正确”的方法 因此,我最终为导航构建了一个自定义视图,如下所示:(注意:我使用的是browserify) //Navig

我目前正在构建一个供内部使用的报告平台,并决定使用Ember.js。到目前为止,这是一个好的和坏的经验;坏的方面主要与文档有关,以及我在网上研究的大多数东西是如何随着最新版本的ember而改变的

我们正在使用twitter引导,引导的导航部分在
li
元素上有
active
类,而不是
a
元素。当然,我的第一个倾向是将jquery作为一种攻击,手动更改活动类,这感觉完全错误,并决定找到“正确”的方法

因此,我最终为导航构建了一个自定义视图,如下所示:(注意:我使用的是browserify)

//NavigationView.js
module.exports=Ember.View.create({
templateName:'navbar',
//将此视图上的“选定”属性绑定到控制器的“选定”属性。
selectedBinding:'AnalyticsApp.NavigationController.selected',
//导航的单个子项
NavViewElement:Ember.View.extend({
//将标记名更改为LI标记,因为引导需要活动类
//在使用{{linkTo}时,替换默认的(ember)锚标记
标记名:“li”,
//将“active”类绑定到computed属性;检查此nav
//元素是当前活动的选项卡。
classNameBindings:['isActive:active'],
//此计算属性将检查此导航项目是否处于活动状态
isActive:function(){
返回this.get('item')==this.get('parentView.selected');
}.property('item','parentView.selected')
})
});
现在,设置视图非常简单,要使用它渲染导航元素,我可以使用:

{{{#view view.NavViewElement item=“network”}
{{{#链接到“网络”}
网络
{{/linkTo}
{{/view}
setupController
方法中的所有路由中,我将“selected”选项卡设置为

AnalyticsApp.NavigationController.set('selected','network');
现在我不确定我的实现,如果有人能告诉我我是否偏离了目标,或者我是否走在正确的道路上,我将不胜感激

我使用
NavigationController
(如下)作为导航逻辑的中央存储,它实际上是一个
ObjectController
,我已经扩展并链接了
.create()

AnalyticsApp.NavigationController=Ember.ObjectController.extend({
所选:空
}).create();
我尝试扩展一个标准控制器,但这并没有公开set/get方法。对这种类型的设置使用
ObjectController
是否正确

感谢您抽出时间阅读,我感谢您的反馈


-Ryan S.

既然我的评论很有用,我就把它转换成一个答案。因此,由于您的
NavigationController
在应用程序范围内使用,请尝试创建如下控制器:

AnalyticsApp.NavigationController = Ember.ObjectController.create({selected:null});

希望对您有所帮助

因为您的
NavigationController
在应用程序范围内使用,您尝试过像这样创建控制器
AnalyticsApp.NavigationController=Ember.ObjectController.create({selected:null})?然后它会公开
set
get
方法吗?是的,这确实有效,谢谢!我不知道我可以只运行create而不进行扩展。这是不同的,如果在控制器上使用
extend
,则将要创建的所有实例都将在其上选择
属性,而
create
只是您正在创建的实例。我知道这是一个老问题,但是您的NavigationController是如何意识到选择的更改以更新所选属性的?@d2kagw需要更新导航的应用程序中的每条路由都有一个
setupController
函数,我正在其中设置所选选项卡:
AnalyticsApp.NavigationController.set('selected','index')感谢您抽出时间,非常感谢。