Lưu ý: Đây là một câu hỏi hơi dài và đòi hỏi một sự hiểu biết tốt về MVVM "mẫu thiết kế", JSON và jQuery ....MVVM có khả thi/khả thi trong ứng dụng DHTML RIA (không có Silverlight/WPF) không?
Vì vậy, tôi có một lý thuyết/tuyên bố rằng MVVM trong DHTML là thể và khả thi và muốn biết liệu bạn có đồng ý/không đồng ý với tôi và tại sao không. Việc triển khai MVVM trong DHTML xoay quanh việc sử dụng các cuộc gọi ajax đến một thực thể máy chủ trả về JSON và sau đó sử dụng thao tác html thông qua javascript để điều khiển html.
Vì vậy, để chia nhỏ. Hãy nói rằng tôi đang xây dựng một trang tìm kiếm để tìm kiếm cho dân trong một cơ sở dữ liệu .....
Các Xem sẽ giống như thế này:
<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>
Sử dụng một số tiêu chuẩn không tính vào html của tôi các yếu tố, tôi đã xác định một cách rõ ràng một Xem và cách nó sẽ tương tác với ViewModel của tôi. Tôi đã tạo một trình phân tích cú pháp MVVM trong javascript giải thích các thuộc tính không chuẩn và liên kết Chế độ xem với đối tượng JSON đại diện cho ViewModel.
Các ViewModel sẽ là một đối tượng 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");
}
}
Các Mẫu thể được bất kỳ tài sản phía máy chủ trả về JSON ... trong ví dụ này, tôi sử dụng asp MVC như một mặt tiền yên tĩnh:
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);
}
Vì vậy, một lần nữa câu hỏi:
là MVVM thể/khả thi trong một ứng dụng DHTML RIA (không Silverlight/WPF) hay tôi đã mất trí?
"Khung MVVM" có thể là một ý tưởng hay không?
Bằng chứng về khái niệm: kaboom.codeplex.com.
"Theo tôi, bạn vẫn tốt hơn rất nhiều toàn bộ của việc sử dụng một kiến trúc phía máy chủ MVC hơn là cố gắng để tạo ra một MVVM phía khách hàng khuôn khổ ". Yea ... không có nghĩa là bạn muốn làm cho toàn bộ trang web của bạn sử dụng loại cơ sở hạ tầng này ... nhưng khi thực hiện tương tác không đồng bộ, MIGHT này là một lựa chọn tốt hơn so với MVC. – Amir
Đồng ý. Nó có thể gây nhầm lẫn giữa các khung công tác phía máy khách như thế này với các khung công tác phía máy chủ như MVC (nếu cú pháp và đánh dấu trang tương tự) ... nhưng đó không phải là lý do đủ tốt để không cho nó bắn. –
Cảm ơn bạn đã nhập. Đôi khi tôi cảm thấy như tôi đang ở trong một buồng echo và đầu vào của bạn được đánh giá cao. – Amir