【问题标题】:Access Knockout ViewModel Data in Sammy route在 Sammy 路由中访问 Knockout ViewModel 数据
【发布时间】:2013-07-05 16:36:03
【问题描述】:

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

谁能指出我做错了什么?

【问题讨论】:

  • 在您的情况下,selectedPage 与 Sammy 路由有何关系?你能扩展你的代码吗
  • 我希望能够从 ViewModel 获取信息以传递给 Sammy.Title 等函数,而不必手动执行。在这个例子中,我已经相当简化了pages 数组。我已经想出了如何在 Sammy 路由中设置 selectedPage(),但是每当我尝试访问像 self.selecedPage().title 这样的视图模型属性时,我会得到 undefined...你能解释一下为什么会这样吗?

标签: jquery knockout.js sammy.js


【解决方案1】:

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

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

【讨论】:

  • 我终于自己想通了,但是 geebus - 多么“愚蠢”的时刻 :)
  • 我找到了你的问题,因为我遇到了类似的问题(但不是真的:)。也许你有线索? my question
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多