Sammy Title插件不与Knockout合作

时间:2013-07-05 05:15:02

标签: jquery knockout.js sammy.js

我刚刚开始使用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,它就有效。谁能看到我做错了什么?

1 个答案:

答案 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);来电相同。