2016-04-05 22 views
1

Kullanıcı arabiriminin yalnızca sayfanın yenilenmesinden sonra doğru verilerle güncelleştirildiği bir sorunla karşılaşıyorum. Burada observableArray is not definedobservableArray UI'yi güncelleştirmiyor

Benim JS Kod geliyorum:

define(
    ['knockout'], 
    function (ko) { 
     "use strict"; 
     return { 
      onLoad: function (widget) { 
       widget.getDetails= function (prod) { 
        var abc = prod.DetailsNumbers(); 
        console.log(abc); 
        var someArray= []; 
        someArray= abc.split(','); 
        //console.log(someArray); 
        widget.anotherObservableArray = ko.observableArray(); 

        for (var i = 0; i < someArray.length; i++) { 
         var temp = { 
          "prodName": ko.observable(someArray[i]) 
         }; 
         var myKoObservableArray = widget.anotherObservableArray; 
         myKoObservableArray.push(temp); 

        } 
        console.log(myKoObservableArray()); 
        this.myKoObservableArray = myKoObservableArray; 
       }; 
      } 
     } 
    } 
); 

Benim HTML:

<div id="someId"> 
    <table> 
     <tbody> 
      <tr> 
       <td>Button Here</td> 
       <td><button data-bind="click: getDetails(product())">Click me</button></td> 
      </tr>// this here is working fine 
     </tbody> 
    </table> 
    <ul data-bind="foreach: myKoObservableArray"> 
     <li> 
      <span data-bind="text: prodName"> </span> //this changes only after a refresh 
     </li> 
    </ul> 
</div> 

data-bind="text: prodName" değişiklikler değer sadece sayfanın bir yenileme sonrasında.

+0

lütfen aynı şey için bir keman oluşturabilir misiniz? –

+0

İkincisi, sorunun kendisi kodun kendisi olması dışında. Rehberlik için bakınız [mcve]. Çalışmıyor gibiydi – Jeroen

cevap

2

Dizide dizisini onLoad ortamında oluşturun ve sonra güncelleştirin. Her seferinde oluşturmaya devam etmeyin.

define(
    ['knockout'], 
    function (ko) { 
     "use strict"; 
     return { 
      onLoad: function (widget) { 
       widget.myKoObservableArray = ko.observableArray(); 
       widget.getDetails= function (prod) { 
        var abc = prod.DetailsNumbers(); 
        console.log(abc); 
        var someArray= []; 
        someArray= abc.split(','); 
        //console.log(someArray); 

        // empty the array 
        widget.myKoObservableArray([]); 

        for (var i = 0; i < someArray.length; i++) { 
         var temp = { 
          "prodName": ko.observable(someArray[i]) 
         }; 
         widget.myKoObservableArray.push(temp); 

        } 
        console.log(widget.myKoObservableArray()); 
       }; 
      } 
     } 
    } 
); 
+0

. Ayrıca, şimdi yinelenen dizi değerleri alıyorum. – user2281858

+0

Evet, boşalması gerektiğini söylemek yerine diziyi gerçekten boşaltmayı unuttum. :) Neden hala işe yaramazsa gelince: Ne kullandığınızı ve "onLoad" ın çağrıldığından emin değilim. Belki de html o zamandan önce zaten bağlıydı ve bu yüzden 'myKoObservableArray' henüz mevcut değil. – Brandon

+0

jquery settimeout çalışması yapabilir mi? – user2281858

İlgili konular