नोट: यह एक घना सवाल यह है कि और MVVM "डिजाइन पैटर्न", JSON और jQuery की अच्छी समझ की आवश्यकता है ....क्या एमवीवीएम एक डीएचटीएम आरआईए आवेदन (कोई सिल्वरलाइट/डब्ल्यूपीएफ) में संभव/व्यवहार्य है?
तो मैं एक सिद्धांत/दावा संभव और है कि DHTML में MVVM है व्यवहार्य और जानना चाहते हैं कि क्या आप मुझसे सहमत हैं और असहमत हैं और क्यों। डीएचटीएम में एमवीवीएम कार्यान्वित करना एक सर्वर इकाई को AJAX कॉल का उपयोग करके घूमता है जो जेएसओएन देता है और फिर एचटीएमएल को नियंत्रित करने के लिए जावास्क्रिप्ट के माध्यम से एचटीएमएल मैनिपुलेशन का उपयोग करता है।
तो इसे तोड़ने के लिए। चलो का कहना है कि मुझे लगता है कि एक डेटाबेस में लोग की खोज करने वाले खोज पृष्ठ का निर्माण कर रहा हूँ .....
देखें कुछ इस तरह दिखेगा:
<body viewmodel="SearchViewModel">
Search:<br />
<input type="text" bindto="SearchString" /><br />
<input type="button" value="Search" command="Search" />
<br />
<table bindto="SearchResults">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>${FirstName}</td>
<td>${LastName}</td>
</tr>
</tbody>
</table>
</body>
कुछ गैर मानक मेरी एचटीएमएल पर विशेषताओं का उपयोग करना तत्व, मैंने घोषणा की है कि देखें और यह मेरे व्यूमोडेल के साथ कैसे बातचीत करेगा। मैंने जावास्क्रिप्ट में एमवीवीएम पार्सर बनाया है जो गैर-मानक विशेषताओं को समझता है और व्यूमोडेल का प्रतिनिधित्व करने वाले JSON ऑब्जेक्ट के साथ व्यू को जोड़ता है।
ViewModel एक JSON ऑब्जेक्ट होना होगा:
//View Model SearchViewModel would be assocaited with View because of <body viewmodel="SearchViewModel">
var SearchViewModel = {
//SearchString variable has a TwoWay binding
//to <input type="text" bindto="SearchString" /><
//if a user types into the text box, the SearchString property will "auto-magically" be updated
//because of the two way binding and how the element was interpreted via my MVVM parser
SearchString: '',
//SearchResults has a OneWay binding to <table bindto="SearchResults">
SearchResults: new Array(),
//Search function will get "auto-magically" get called because of
//the command binding to <input type="button" command="Search" />
Search: function() {
//using jquery to call into the server asynchronously
//when the server call is completed, the PopulateSearchResults method will be called
$.getJSON("www.example.com/SearchForPerson",
{ searchString: SearchViewModel.SearchString },
SearchViewModel.PopulateSearchResults);
}
PopulateSearchResults: function(data) {
//set the JSON array
SearchViewModel.SearchResults = data;
//simulate INotifyPropertyChanged using the MVVM parser
mvvmParser.notifyPropertyChanged("SearchResults");
}
}
मॉडल किसी भी सर्वर साइड संपत्ति कि JSON देता है ... इस उदाहरण में हो सकता है, मैं एक शोकहारा मुखौटा के रूप में एएसपी MVC प्रयोग किया है:
public JsonResult SearchForPerson(string searchString)
{
PersonDataContext personDataContext = new PersonDataContext(); //linq to sql.....
//search for person
List<Person> results =
personDataContext.Persons
.Where(p => p.FirstName.Contains(searchString)
|| p.LastName.Contains(searchString))
.ToList();
return Json(results);
}
तो, फिर से सवाल:
MVVM संभव/व्यवहार्य एक DHTML रिया आवेदन में (कोई सिल्वरलाइट/है डब्ल्यूपीएफ) या मैंने अपना दिमाग खो दिया है?
क्या यह "एमवीवीएम फ्रेमवर्क" एक अच्छा विचार हो सकता है?
अवधारणा का सबूत: kaboom.codeplex.com।
"मेरी राय में, आप अभी भी एक सर्वर साइड MVC वास्तुकला का प्रयोग के बजाय एक ग्राहक के पक्ष MVVM बनाने का प्रयास कर की एक पूरी बहुत बेहतर कर रहे हैं रूपरेखा "। हाँ ... किसी भी तरह से आप अपनी पूरी साइट को इस तरह के बुनियादी ढांचे का उपयोग नहीं करना चाहेंगे ... लेकिन जब एसिंक्रोनस इंटरैक्शन करते हैं, तो यह एमवीसी से बेहतर विकल्प हो सकता है। – Amir
सहमत हुए। यह एमवीसी जैसे सर्वर साइड फ्रेमवर्क के साथ इस तरह भ्रमित मिश्रण क्लाइंट साइड फ्रेमवर्क प्राप्त कर सकता है (यदि सिंटैक्स और पेज मार्कअप समान दिखता है) ... लेकिन यह एक अच्छा कारण नहीं है कि इसे शॉट न दें। इनपुट के लिए –
धन्यवाद। कभी-कभी मुझे लगता है कि मैं एक गूंज कक्ष में हूं और आपके इनपुट की बहुत सराहना की जाती है। – Amir