2013-07-05 2 views
0

내 Knockout/Sammy SPA에서 내 Sammy 경로의 ViewModel 데이터에 액세스하려고하지만 Sammy 경로는 전에 내 녹아웃 동작 전에 실행됩니다.Sammy 경로의 녹아웃 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()); 

이 나는 ​​또한에 따라 배열에서 페이지를 검색하는 시도 ... 내가 첫 번째 페이지와 동일한 self.selectedPage()을 설정하고 있습니다 때문에 초기 노선에 작동하지만, 이후의 경로가 작동하지 않습니다 route 속성을 정확히 selectedPage 루트 이벤트의 범위 내에서 오른쪽 페이지에 관찰 설정할 수 있습니다 Sammy 경로에 self.selectedPage() 설정하지만 그보기 모델의 속성에 액세스하려고하면 : self.selectedPage().title, 나는 console.log(self.selectedPage())에 속성이 표시 될 것이므로 undefined으로 돌아 오십시오.

누군가 내가 잘못하고있는 것을 지적 할 수 있습니까?

+0

어떻게'selectedPage'가 귀하의 경우 Sammy 라우팅에 관련이 있습니까? 코드를 확장 할 수 있습니까 –

+0

ViewModel에서 정보를 가져 와서 수동으로 처리하는 대신 Sammy.Title과 같은 함수로 전달할 수 있기를 바랍니다. 나는이 예제에서'pages' 배열을 단순화했습니다. 이후 Sammy 경로에서 selectedPage()를 설정하는 방법을 알아 냈지만'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) –

관련 문제