0

在我的 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属性从数组中检索页面并self.selectedPage()在 Sammy 路由中设置,这将selectedPage在路由事件范围内正确地将 observable 设置为正确的页面,但是当我尝试访问属性时那个视图模型,比如:self.selectedPage().title,我回来了undefined,这很奇怪,因为console.log(self.selectedPage())会显示属性。

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

4

1 回答 1

0

您的页面对象的定义方式,它没有title属性,而是一个pageTitle. 你有没有尝试过

this.get('#/about', function(context) {
        this.title(self.selectedPage().pageTitle); 
    });
于 2013-10-03T00:22:51.263 回答