【发布时间】:2013-07-05 16:36:03
【问题描述】:
在我的 Knockout/Sammy SPA 中,我想访问我的 Sammy 路由中的 ViewModel 数据,但是,Sammy 路由在我的 Knockout 行为之前执行。它适用于初始路由,因为我将self.selectedPage() 设置为等于第一页,但它不适用于后续路由...
function MyViewModel() {
var self = this;
self.pages = [
{'linkText': 'Home', 'pageTitle': 'Welcome', 'route': '#/'},
{'linkText': 'About', 'pageTitle': 'About Us', 'route': '#/about'},
]
self.selectedPage = ko.observable(self.pages[0]);
self.goToPage = function(page) {
self.selectedPage(page);
}
Sammy(function() {
this.use(Sammy.Title);
this.setTitle('The Base Title');
this.get('#/', function(context) {
this.title(self.selectedPage().title); //works
});
this.get('#/about', function(context) {
this.title(self.selectedPage().title); //title is undefined
});
}).run('#/');
}
ko.applyBindings(new MyViewModel());
我还尝试根据页面的 route 属性从数组中检索页面,并在 Sammy 路由中设置 self.selectedPage(),这将正确地将 selectedPage observable 设置为范围内的正确页面路由事件,但是当我尝试访问该视图模型的属性时,例如:self.selectedPage().title,我会返回undefined,这很奇怪,因为console.log(self.selectedPage()) 会显示该属性。
谁能指出我做错了什么?
【问题讨论】:
-
在您的情况下,
selectedPage与 Sammy 路由有何关系?你能扩展你的代码吗 -
我希望能够从 ViewModel 获取信息以传递给 Sammy.Title 等函数,而不必手动执行。在这个例子中,我已经相当简化了
pages数组。我已经想出了如何在 Sammy 路由中设置 selectedPage(),但是每当我尝试访问像self.selecedPage().title这样的视图模型属性时,我会得到undefined...你能解释一下为什么会这样吗?
标签: jquery knockout.js sammy.js