我刚刚开始使用Sammy和Knockout。我在视图模型中定义了一个简单的页面/路由数组以及我的路径:
(function($) {
function ViewModel() {
var self = this;
self.chosenRoute = ko.observable();
self.viewData = ko.observable();
self.pages = [
{'title': 'Home', 'route': '#/'},
{'title': 'Job Candidates', 'route': '#/job-candidates'},
...
];
self.goToPage = function(page) {
location.hash = page.route;
};
Sammy(function() {
this.use('Title');
this.setTitle('Vintage Services'); // Doesn't work
this.get('#/', function(context) {
self.chosenRoute('#/');
context.render('/static/templates/home.html', null,
self.viewData);
window.document.title = 'Vintage Services'; // Works
});
this.get('', function() {
this.app.runRoute('get', '#/');
});
}).run();
}
ko.applyBindings(new ViewModel());
})(jQuery);
我在我的模板中包含了Sammy Title插件,我没有收到任何错误,但插件不会设置标题。如果我使用window.document.title
,它就有效。谁能看到我做错了什么?
答案 0 :(得分:0)
Title plugin有两种方法:
setTitle
允许设置全局标题或修改每个路径/页面标题的函数。
所以它本身并没有设置页面标题,你需要使用插件第二种方法:
Helper title()设置文档标题,如果设置则将其传递给setTitle()定义的函数。
因此,要实际修改标题,您需要在路线中使用title
助手:
this.get('', function() {
this.title('Vintage Services');
this.app.runRoute('get', '#/');
});
或者,如果您想在标题中始终使用“Vintage Services”,则可以使用之前的setTitle
this.setTitle('Vintage Services'); //so this call does not set the title
this.get('', function() {
this.title(); // this call sets the title to 'Vintage Services'
//this.title('Main'); //this call sets the title to 'Vintage Services Main'
this.app.runRoute('get', '#/');
});
注意:如果您使用的是官方Sammy插件,则this.use('Title');
和this.use(Sammy.Title);
来电相同。