2013-07-05 2 views
0

В моем ночном/Sammy SPA я хотел бы получить доступ к данным ViewModel на моем маршруте Сэмми, однако маршрут Сэмми выполнен до моего поведения нокаута. Он работает по первоначальному маршруту, потому что я заходящий self.selectedPage() равен первой странице, но она не работает для последующих маршрутов ...Доступ к нокауту ViewModel Данные на маршруте Сэмми

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() на маршруте Сэмми, который правильно установит selectedPage, наблюдаемый на нужную страницу в пределах области действия маршрута, но когда я попытаюсь получить доступ к свойству этой модели вида, например: self.selectedPage().title, I верните undefined, что нечетно, потому что console.log(self.selectedPage()) покажет свойство.

Может кто-нибудь указать, что я делаю неправильно?

+0

Как 'selectedPage' высылается на прокладку Sammy в вашем случае? Не могли бы вы расширить свой код? –

+0

Что я хотел бы сделать, это получить информацию из ViewModel для перехода к таким функциям, как Sammy.Title, вместо того, чтобы делать это вручную. В этом примере я упростил массив 'pages'. С тех пор я выяснил, как установить selectedPage() в маршруте Sammy, но в любое время я пытаюсь получить доступ к свойству модели представления, например 'self.selecedPage(). Title', я получаю' undefined' ... вы можете объяснить почему это может быть? – Brandon

ответ

0

Способ определения объекта вашей страницы, он не имеет свойства title, но pageTitle. Вы пробовали

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

Я, наконец, понял это сам, но geebus - какой момент «derp» :) – Brandon

+0

Я нашел ваш вопрос, потому что у меня была аналогичная проблема (но не совсем :). Может быть, у вас есть ключ? [мой вопрос] (http://stackoverflow.com/questions/19149129/setting-a-knockout-observable-using-sammy-for-routing) –