2015-12-27 3 views
5

के साथ जेसन को अपडेट करना असल में मुझे जेसन ऑब्जेक्ट्स (प्रतिक्रिया और लॉनाश) के साथ पूरी तरह से माइस्साइट फ्रंटेंड को संभालने की आवश्यकता है।लॉसैश

मैं प्रारंभिक डेटा एक ajax कॉल के माध्यम से हम कहते हैं,

starred[] //returns empty array from server 

उपयोगकर्ता फिर से क्लिक करता है तो हो रही है और जब उपयोगकर्ता स्टार बटन पर क्लिक करता है यह नई json द्वारा जोड़ा जा रहा,

starred.push({'id':10,'starred':1}); 

तारांकित 0

current_star=_findWhere(starred,{'id':10}); 
_.set(curren_star,'starred',0); 

होना चाहिए, लेकिन जब console.log

०१२३५१६४१०६१ कर
console.log(starred); //returns 
[object{'id':10,'starred':0}] 

लेकिन वास्तव में जब यह दोहराया है वैश्विक json, अपडेट नहीं हो रहा है, जबकि कुछ अन्य कार्यों json की तरह है प्रदर्शन कर रहा हूँ,

console.log(starred); //returns 
[object{'id':10,'starred':1}] 

वैश्विक अद्यतन करने के लिए कैसे, मैं एक बार चाहते हैं मैं json बदल , इसे कभी बदला जाना चाहिए। क्या मुझे जेसन को बहुत आसान तरीके से संभालने के लिए कुछ बेहतर ढांचे का सुझाव देने का कोई विचार हो सकता है।

पहले धन्यवाद!

+0

क्या आप underscore.js लाइब्रेरी का उपयोग कर रहे हैं? लिखने के लिए अच्छा हो सकता है कि –

+0

nope में ... its lodash.js –

+0

क्या आप कुछ और कोड जोड़ सकते हैं? – Kiril

उत्तर

0

मुझे लगता है कि समस्या मूल स्थिति को बदलने में है। इसके बजाय धक्का बनाने का , तो आपको निम्न फ़े क्या करने की जरूरत:

var state = { 
    starred: [] 
}; 

//perform push 
var newItem = {id:10, starred:1}; 
state.starred = state.starred.concat(newItem); 

console.log(state.starred); 
//{ id: 10, starred: 1 }] 

var newStarred = _.extend({}, state.starred); 
var curr = _.findWhere(newStarred, {id: 10}); 

curr.starred = 0; 

state = _.extend({}, state, {starred: newStarred}); 

console.log(state.starred) 
//{ id: 10, starred: 0 }] 

एक और अधिक अच्छा दिखने फैशन में इस का समाधान करने के लिए, आप का उपयोग या तो की प्रतिक्रिया अचल स्थिति सहायक, या ES6 सामान, जैसे की जरूरत है: {... राज्य, {तारांकित: []}} हर बार नई वस्तु को विस्तारित करने के बजाय। या बस प्रतिक्रिया-redux =)