在Sammy路线中访问Knockout ViewModel数据

时间:2013-07-05 16:36:04

标签: jquery knockout.js sammy.js

在我的Knockout / Sammy SPA中,我想在我的Sammy路线中访问ViewModel数据,但是,在我的Knockout行为之前执行了的Sammy路线。它适用于初始路由,因为我将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可观察到的路径事件范围内的右页,但是当我尝试访问该视图模型的属性时,例如:self.selectedPage().title,我回到undefined,这是奇怪的,因为console.log(self.selectedPage())将展示该物业。

有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:0)

定义页面对象的方式,它没有title属性,而是pageTitle。你试过吗

this.get('#/about', function(context) {
        this.title(self.selectedPage().pageTitle); 
    });