संपादित करें: मैं सवाल गलत समझा है, तो यहां एक हो रहा है मेरे उत्तर का दिनांकित संस्करण:
सबसे पहले, मुझे लगता है कि आपको एम्बर-डेटा का उपयोग करने के लिए स्विच करना चाहिए। फिर आईडी द्वारा कर्मचारी को लाने से बस this.get("store").find("employee", id)
पर कॉल करने का संकल्प होगा।
यदि आप सादा AJAX का उपयोग करना चाहते हैं, तो मेरा सुझाव है कि आप Service बनाते हैं जो विनिर्देशों (एपीआई एंडपॉइंट यूआरएल, डेटा प्रारूप, और इसी तरह) को समाहित करता है और केवल मॉडलों को ढूंढने और अपडेट करने के लिए सरल तरीकों का खुलासा करता है।
और अंत में, "डेटा डाउन, एक्शन अप" पैटर्न का अनुपालन करने के लिए, आपको इस घटक में मॉडल को अपडेट नहीं करना चाहिए। इसके बजाय माता-पिता नियंत्रक/घटक को एक क्रिया भेजें। इसलिए जैसा:
app/components/employee-selector.js
(घटक आप लिख रहे हैं):
export default Ember.Component.extend({
actions: {
updateId(id) {
Ember.$.post("http://server.ip.com/api/v1/getEmployee", { id: params.id }.then((response) => {
this.sendAction("select", response);
});
}
});
app/templates/new/it-request.hbs
:
{{employee-selector select=(action "selectEmployee")}}
app/controllers/new/it-request.js
:
export default Ember.Controller.extend({
actions: {
selectEmployee(employeeData) {
this.set("model.name", employeeData.name);
this.set("model.position", employeeData.name);
}
}
});
पुराना जवाब:
एक बेवकूफ समाधान Route
में ऐसा करना होगा।
सबसे पहले आप app/router.js
में एक मार्ग जोड़ना चाहिए:
this.route("employees", function() {
this.route("show", { path: ":id" });
}
से app/employees/show/route.js
में मार्ग को परिभाषित:
import Ember from "ember";
export default Ember.Route.extend({
model(params) {
return new Ember.RSVP.Promise((resolve, reject) {
Ember.$.post("http://server.ip.com/api/v1/getEmployee", { id: params.id }.then(
(response) => { resolve(response) },
reject
);
});
}
});
(एकमात्र कारण मैं एक नया वादा में सब कुछ लिपटे प्रतिक्रिया अनुकूलन अनुमति देने के लिए है - बस उस कोड के साथ resolve(response)
को प्रतिस्थापित करें जो सर्वर से कच्ची प्रतिक्रिया को बदलता है और resolve
को इस रूपांतरित संस्करण के साथ आमंत्रित करता है)।
लेकिन यदि आपके पास एपीआई के साथ अधिक संचार होगा, और मुझे लगता है कि आप करेंगे, तो मैं सुझाव देता हूं कि आप एम्बर-डेटा या एम्बर (संभवतः कक्षा) के लिए किसी अन्य डेटा लेयर लाइब्रेरी का उपयोग करने का प्रयास करें।
या कम से कम service लिखें जो एपीआई के साथ सभी संचार को दूर करता है और कहीं भी कच्चे AJAX अनुरोधों का उपयोग करता है।
लेकिन मुझे मार्ग कर्मचारियों को क्यों बनाना चाहिए? मैं जो चाहता हूं वह एक ऐसा फॉर्म दिखाना है जिसमें कर्मचारी की जानकारी के लिए एक खोज बॉक्स है और फिर उस फॉर्म को भरना जारी रखें जिसमें अधिक फ़ील्ड हैं और आखिरकार उस सर्वर को उस जानकारी को जोड़ दें। यह सब रूट का उपयोग कर नया/यह अनुरोध – DeividKamui
ठीक है, क्षमा करें, मुझे गलत समझा गया। इस मामले में घटक ठीक है, लेकिन फिर भी, मुझे लगता है कि आपको AJAX तर्क को किसी सेवा में निकालना चाहिए या एम्बर-डेटा पर स्विच करना चाहिए। – edziubudzik
और एक और बात - इस घटक को शायद मॉडल को अपडेट नहीं करना चाहिए, बल्कि इसके बजाय इसे नए कर्मचारी डेटा के साथ एक कार्रवाई भेजनी चाहिए ताकि मूल घटक/नियंत्रक इसे संभाल सके और उसके अनुसार मॉडल को अपडेट कर सके। – edziubudzik