2015-01-29 2 views
1

관찰 가능 어레이의 끝 부분에 데이터를 추가하려고하지만 예상대로 작동하지 않습니다. 나는 그것이 사소한 것이지만 나는 단지 주위에 내 머리를 얻을 수 없다는 것을 내기. 내가 뭐하는 거지ko.observablearray 끝 부분에 데이터 추가

:

 self.businesses = ko.observableArray(); 

     function Business(business) { 
      var self = this; 
      self.BusinessID = ko.observable(business.BusinessID); 
      self.Type = ko.observable(business.Type); 
      self.Location = ko.observable(business.Location); 
     } 

    /*ajax get array of businesses as follows: 
[ 
     { 
      "$id": "1", 
      "BusinessID ": 62, 
      "Type": "Data", 
      "Location": "Data" 
      }, 
     { 
      "$id": "2", 
      "BusinessID ": 63, 
      "Type": "Data", 
      "Location": "Data" 
     }, 
     { 
      "$id": "3", 
      "BusinessID ": 64, 
      "Type": "Data", 
      "Location": "Data",  
     } ] 
    */ 

       var mappedBusinesses = $.map(data, function (business) { return new Business(business) }); 
      self.businesses(mappedBusinesses); 

이 모든 작품은 예상대로와 obersablearray이 채워집니다.

그러나 다른 비즈니스를 추가하면 작동하지 않습니다. 내가 (newBusiness로)이 반환 아약스 호출하는 경우 예를 들어, :

{ 
    "$id": "1", 
    "BusinessID ": 68, 
    "Type": "Data", 
    "Location": "Data" 
} 

을하고 내가 할 :

self.businesses().push(newBusiness); 

그것은 "개체"가 아닌 비즈니스로 배열에 추가합니다.

var bus = $.map(newBusiness, function (business) { return new Business(business) }); 
self.businesses().push(bus); 

하지만 난 JS 콘솔 "catch되지 않은 형식 오류에 오류를 얻을 : 그래서 나는 내가 할 것이라고 생각

그래서 나는 새로운 VAR를 만들어 브래킷을 추가 널 (null)의 속성을 읽을 수 없습니다 'BusinessID' [] in이고 관찰 가능한 배열에 추가되지만 "Business"객체가 아니라 끝에있는 "Array [1]"객체로 추가되며 다른 객체와 마찬가지로 작동하지 않습니다. 다음과 같은 코드 :

var newBus = { 
      BusinessID: newBusiness.BusinessID, 
      Type: newBusiness.Type, 
      Location: newBusiness.Location    
} 

     var bus = $.map(newBus, function (business) { return new Business(business) }); 
    self.businesses().push(bus); 

언급 한 바와 같이 이것은 관찰 가능한 배열에 추가되지만 실제로 "비즈니스"개체로 추가되지는 않습니다 ct가 아니라 "array [1]"객체로 사용됩니다.

나는 그렇게 기본적인 것이지만 그냥 작동시키지 못할 것이라고 생각합니다!

self.businesses.push(newBusiness); 

이 페이지를 참조하십시오

self.businesses().push(newBusiness); 

관찰 가능한 배열이 자신의 배열 기능을 가지고, 당신은 단지이 (NO 괄호)를 수행해야합니다

+0

JSON에서 BusinessID 속성 뒤에 추가 공백이 있음을 알 수 있습니다. 이것이 문제를 일으킬 수 있는지 확실하지 않습니다. 이 공백이 의도 된 것입니까? –

+0

'dperry'는'()'및 push를하지 않고 시도해보아야합니다. 그렇지 않으면 저희에게 알려주십시오. 건배 –

+0

죄송합니다 - 공백은 복사/편집/붙여 넣기입니다 (너무 커서 전체 요청을 표시하고 싶지 않습니다).()를 사용하지 않고 시도했지만 오류가 발생했습니다. Uncaught ReferenceError : 바인딩을 처리 할 수 ​​없습니다. "text : function() {return Type}" 메시지 : 유형이 정의되지 않았습니다. "foreach : businesses"및 tr 요소 "text : Type"이있는 테이블을 가지고 있으므로 HTML 페이지에서 가져온 것 같습니다. – user3129594

답변

3

아아 나는 간단 할 것임을 알았다!

전체 배열을 ObservableArray에 게시하는 중입니다. 객체뿐 아니라.

수정은 :

self.businesses.push(newBusiness[0]) 

이 [0]에 배열에 실제 데이터를 푸시받을 아니라 객체를 추가했다!

답변 해 주셔서 감사합니다.

관련 문제