2013-06-21 5 views
5

एम्बर जेएस सरणी को अद्यतन करना दृश्यों में प्रतिबिंबित नहीं हो रहा है।एम्बर जेएस, दृश्यों को प्रतिबिंबित नहीं कर रहा है

नियंत्रक

App.MyController = Ember.ArrayController.extend({ 
    results: [], 
    init: function(){ 
    _this = this 
    App.MyModel.find({}).then(function(contents) { 
     obj1 = contents.objectAt(0) 
     obj1.get('data').hasMany.results.forEach(function(item){ 
      _this.results.push(item) 
     }); 
    }) 
    //rest of the code 
    } 
}) 

खाका

{{#each results}} 
    // show items of reults. 
{{/each}} 

इस कोड है, जिसमें मैं सर्वर से डेटा प्राप्त करने में कर रहा हूँ का टुकड़ा है, और उसके लोड हो रहा है पर, मैं इसे परिणाम सरणी में धक्का कर रहा हूँ। सर्वर से डेटा के लिए लोड होने में कुछ समय लगता है, इसलिए खाली परिणाम सरणी पर टेम्पलेट मानचित्र। आदर्श रूप से, परिणाम सरणी को टेम्पलेट में चीजों को अद्यतन करना चाहिए लेकिन तर्कसंगत रूप से यह नहीं होना चाहिए।

क्या कोई शरीर जानता है कि मुझे कहाँ गुम है? या गलत कर रहे हैं।

अग्रिम धन्यवाद।

उत्तर

15

काम करने के लिए बाइंडिंग के लिए आपको के बजाय pushObject का उपयोग करना होगा। एंबर सरणी pushObject पर

App.MyController = Ember.ArrayController.extend({ 
    results: [], 
    init: function(){ 
    _this = this; 
    App.MyModel.find({}).then(function(contents) { 
     obj1 = contents.objectAt(0); 
     obj1.get('data').hasMany.results.forEach(function(item){ 
     _this.results.pushObject(item) 
     }); 
    }) 
    //rest of the code 
    } 
}); 

फोर अधिक जानकारी कृपया here देखते हैं।

उम्मीद है कि यह मदद करता है।

+0

आपने अभी अपना दिन बचाया है। आपको धन्यवाद। –

+0

ध्यान दें कि आपकी सरणी को 'एम्बर.NativeArray' होना चाहिए, जो एक' MutableArray' भी है। यदि आप एम्बर मूल जेएस ऐरे प्रोटोटाइप का विस्तार कर रहे हैं, तो मूल जेएस सरणी में '.pushObject (चीज़) 'फ़ंक्शन होगा। यदि आप देशी प्रोटोटाइप को विस्तारित नहीं कर रहे हैं तो आपको 'एम्बर.ए ([])' का उपयोग करने की आवश्यकता होगी। [एम्बर.ए() के बारे में अधिक जानकारी (https://emberjs.com/api/ember/3.0/functions/@ember%2Farray/A) –

0

मुझे एक ही समस्या थी। समस्या यह है कि एम्बर को सरणी में बदलाव के बारे में अधिसूचित नहीं किया जाता है। इस मामले में आपके पास एक विशेष एम्बर फ़ंक्शन (pushObject) है जो मानक पुश को प्रतिस्थापित करता है और परिवर्तन के ढांचे को भी सूचित करता है। लेकिन अन्य मामलों में (उदाहरण के लिए Array.splice) आपके पास ऐसा फ़ंक्शन नहीं है, इसलिए आपको मैन्युअल रूप से ढांचे को सूचित करने की आवश्यकता है। आप इसके साथ ऐसा कर सकते हैं:

this.notifyPropertyChange('array'); 
संबंधित मुद्दे