1

我刚刚开始使用 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,它可以工作。谁能看到我做错了什么?

4

1 回答 1

0

Title 插件有两种方法:

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);调用是等效的。

于 2013-07-05T06:09:57.700 回答