2012-05-16 2 views
3

knockout.js를 처음 접했고 여기에 간단한 내용이 누락되었습니다. 목록에있는 개체 목록이 있고 그 중 하나를 선택하고 속성을 가져 와서 더 많은 데이터를로드하기 만하면됩니다.knockout.js를 클릭하면 배열에서 객체를 전달합니다.

JS : 여기

function category(data) { 
       this.categoryName = ko.observable(data.CategoryName); 
       this.categoryID = ko.observable(data.CategoryID); 
      } 

      function CatalogViewModel() { 

       //Data 
       var self = this; 
       self.categories = ko.observableArray([]); 
       self.chosenCategoryID = ko.observable(); 

       //Behaviours 
       self.gotoCategory= function (category) { 
        self.chosenCategoryID(category.categoryID); 
        alert(category.categoryID); 
       }; 

       $.getJSON("/api/catalog", function (allData) { 
        var mapped = $.map(allData, function (item) { return new category(item) }); 
        self.categories(mapped); 
       }); 
      } 

      ko.applyBindings(new CatalogViewModel()); 

내 HTML입니다 :

<ul data-bind="foreach: categories"> 
      <li> 
       <a data-bind="click: $parent.gotoCategory"><label data-bind="text: $data.categoryName"></label></a> 
      </li> 
     </ul> 

항목은 완벽하게 나열하지만 내가 클릭 한 항목을 때, 내 카테고리 ID를 얻을 수 있었으면하고 있지만 잔뜩 얻을 javascript 대신 평가 및 인수를 시도하는 함수처럼 보입니다.

무엇이 여기에 있습니까?

function c(){if(0<arguments.length){if(!c.equalityComparer||!c.equalityComparer(d,arguments[0]))c.I(),d=arguments[0],c.H();return this}a.U.La(c);return d}function c(){if(0<arguments.length){if(!c.equalityComparer||!c.equalityComparer(d,arguments[0]))c.I(),d=arguments[0],c.H();return this}a.U.La(c);return d} 

답변

4

당신의 categoryID가 관찰 않은 것 같습니다 : -

편집 여기에 내가 내 ALERT의 내용물입니다. observable의 값에 액세스하려면 인수가없는 함수로 호출해야합니다.

그래서, 당신의 gotoCategory 더 좋아 보일 것입니다 :

  self.gotoCategory= function (category) { 
       self.chosenCategoryID(category.categoryID()); 
       alert(category.categoryID()); 
      }; 
+0

GAH을 - 멋진 당신을 감사합니다 -이 나를 죽이고 있었다! – Slee

관련 문제