2012-01-20 35 views
42

Tôi đang xem Ember.js và đã đọc tài liệu để thử và hiểu cách sử dụng nó. Tôi nhận được nó (khá tốt), ngoại trừ một điều. Theo cách suy nghĩ của tôi trong mẫu MVC, Mô hình là kho lưu trữ dữ liệu trong ứng dụng. Tôi có thể thấy cách hoạt động cho dữ liệu phía máy khách trong Ember.js. Những gì tôi không nhận được là làm thế nào để buộc dữ liệu đó trở lại máy chủ để nếu thay đổi dữ liệu tại máy khách, các thay đổi được cập nhật trong máy chủ. Và ngược lại. Tôi đã làm điều này bằng cách trong các ứng dụng web của tôi thực hiện các cuộc gọi Ajax/JSON tới lui tới máy chủ, tôi chỉ không nhận được cách thực hiện điều đó bằng cách sử dụng Ember.js.ember.js và máy chủ

Trả lời

51

đào chỉ là một chút xung quanh emberjs on GitHub Tôi đã thấy điều này: https://github.com/emberjs/data:

Ember dữ liệu là một thư viện cho các mô hình tải từ một lớp kiên trì (chẳng hạn như một API JSON), cập nhật những mô hình, sau đó lưu những thay đổi. Nó cung cấp nhiều cơ sở bạn tìm thấy trong các ORM phía máy chủ như ActiveRecord, nhưng được thiết kế đặc biệt cho môi trường độc đáo của JavaScript trong trình duyệt.

Tôi cũng khuyên bạn nên đọc Ember.js Live Collections. Những gì bạn muốn là phải có một bộ sưu tập các mô hình đó sẽ biết làm thế nào để đồng bộ với phía máy chủ, có thể mã ví dụ là:

// our model 
App.Person = Ember.Object.extend(); 

App.people = Ember.ArrayController.create({ 
    content: [], 
    save: function() { 
    // assuming you are using jQuery, but could be other AJAX/DOM framework 
    $.post({ 
     url: "/people", 
     data: JSON.stringify(this.toArray()), 
     success: function (data) { 
     // your data should already be rendered with latest changes 
     // however, you might want to change status from something to "saved" etc. 
     } 
    }); 
    } 
}); 

Sau đó, bạn muốn gọi App.people.save() tại dịp cần thiết.

Ngoài ra hãy chắc chắn kiểm tra bài viết này, Advice on & Instruction in the Use Of Ember.js, mà đi sâu hơn vào giao tiếp máy chủ-khách hàng với Ember và cũng đề cập đến emberjs/data.

Lưu ý: Thư viện dữ liệu Emberjs nên được sử dụng thận trọng vì thực tế nó chưa được sản xuất.

+1

Cảm ơn câu trả lời tuyệt vời, rất hữu ích và bài viết bạn tham chiếu sẽ hữu ích cho tôi. Theo một số cách, cách thức Ember.js được sử dụng ở phía máy khách giống như mẫu Mediator/Colleague, nó hữu ích cho việc quản lý các thay đổi trong các hộp thoại của GUI. Gợi ý của bạn ở trên sẽ giúp tôi kéo loại điều đó lại với nhau để giữ cho máy chủ/máy khách đồng bộ. Một lần nữa, cảm ơn rất nhiều! –

+0

Tôi không nghĩ rằng dữ liệu ember nên được đưa vào sử dụng tại thời điểm này, kể từ khi nó chỉ ra rõ ràng rằng nó là WORK IN PROGRESS và THEO phần phát triển RAPID cho emberjs. Tôi nghĩ một giải pháp thay thế ổn định sẽ tuyệt vời. –

+0

@random liên kết đến chuyến đi chắc chắn là có giá trị ở đó, nó có một liên kết đến một phiên bản cũ của một bài báo rất mang tính giáo dục và cung cấp cho mọi người ý tưởng về cách thực hiện giao tiếp giữa máy khách và máy chủ trong ember. Đặt lại. –

6

Trong Ember.js, "mô hình" chứa trong đối tượng Ember sẽ chứa thêm một trừu tượng của cơ sở dữ liệu phía máy chủ bên dưới, nếu bạn đang sử dụng một. Phần điều khiển của ứng dụng sau đó sẽ có các phương thức cho phép bạn truy xuất và gửi dữ liệu được gọi khi cần để cập nhật mô hình (sử dụng Ajax). Điều này là tốt bởi vì bạn có một mô hình có thể đáp ứng nhanh chóng ở phía máy khách với bất kỳ đầu vào nào mà người dùng cung cấp ứng dụng (tổ hợp phím, di chuyển chuột, bất cứ điều gì) và chọn lọc khi thực hiện các truy vấn tương đối tốn kém tới cơ sở dữ liệu phía máy chủ. Bằng cách này, một số hiệu suất của ứng dụng không còn bị cản trở bởi độ trễ của yêu cầu dữ liệu đến một máy chủ bên ngoài, mà trong một số trường hợp có thể cho phép bạn tạo các ứng dụng có khả năng đáp ứng của ứng dụng gốc.

+7

DOM là Tài liệu Mô hình đối tượng và thường đề cập đến sự biểu thị cây của các phần tử HTML (hoặc XML) và API của nó. Trong mô hình Ember.js chắc chắn không được lưu trữ trong DOM và đó không phải là một ý tưởng tốt để lưu trữ dữ liệu của bạn trong DOM - DOM là phần chậm nhất của API trình duyệt JavaScript. Bạn có lẽ có thể lưu trữ bindings trong DOM (như knockout.js hiện), nhưng không phải là mô hình chính nó. Đây là lý do tại sao tất cả các thay đổi từ jQuery đang được thực hiện tại thời điểm này - để không lưu trữ trạng thái dữ liệu và dữ liệu trong DOM. –

+0

@gryzzly - bất kỳ tài liệu tham khảo bài viết/thảo luận nào về DOM đều chậm hơn và có vấn đề với jQuery? – theringostarrs

+0

Có thể cho việc sử dụng của bạn, jQuery và DOM là tốt! Khi tôi lần đầu tiên đọc mô tả về BackboneJS: “Khi làm việc trên một ứng dụng web liên quan đến rất nhiều JavaScript, một trong những điều đầu tiên bạn tìm hiểu là ngừng kết hợp dữ liệu của bạn với DOM.Thật đơn giản để tạo các ứng dụng JavaScript, kết thúc như một đống các bộ chọn jQuery và callbacks, tất cả đều cố gắng giữ dữ liệu đồng bộ giữa giao diện người dùng HTML, logic JavaScript của bạn và cơ sở dữ liệu trên máy chủ của bạn. Đối với các ứng dụng phía máy khách phong phú, một cách tiếp cận có cấu trúc hơn thường hữu ích. ”Nó khớp chính xác với suy nghĩ của tôi. –

5

Tôi muốn hình dung Ember.js theo cặp như thế này

  • xem và Templates có tương quan (rõ ràng), tinh chỉnh Views-Class để kiểm soát Template (như classnames)
  • Router và đường bay làm việc một chút giống như bộ điều khiển trong MVC. Chúng có trách nhiệm định tuyến yêu cầu đến điểm cuối chính xác
  • Bộ điều khiển và Mô hình là trung tâm mô hình, một (Mô hình) mô tả dữ liệu bạn sẽ xử lý trong ứng dụng của mình. nhiều hơn lên hẻm của bạn).Các mẫu sẽ treo lên bộ điều khiển ví dụ và

Về cơ bản, bạn có thể tải mô hình của mình lên một mô hình và có thể dễ dàng mô hình hóa quy trình làm việc trên mô hình đó (tức là những thứ không chạm vào mô hình trong lõi/dữ liệu của nó) trong bộ điều khiển của bạn. Đối với một ứng dụng blog Ví dụ, bạn sẽ mô tả các bài trong mô hình và thêm một cái gì đó như thế cho bộ điều khiển

App.PostController = Ember.ObjectController.extend({ 
    content: null, 

    // initial value 
    isExpanded: false, 

    expand: function() { 
    this.set('isExpanded', true) 
    }, 

    contract: function() { 
    this.set('isExpanded', false) 
    } 
}); 

Bây giờ bạn có thể tương tác với represenation của mô hình về lối suy nghĩ thông qua bộ điều khiển . Việc mở rộng bài đăng hay không không thay đổi mô hình, chỉ thay đổi dữ liệu.

Về tải lại dữ liệu từ máy chủ, tôi có hai câu trả lời cho bạn

  1. tôi thấy this article khá hữu ích trong việc tìm hiểu các kết nối (và bỏ phiếu đơn giản, mặc dù đơn giản)
  2. Nếu bạn đang sử dụng Rails, bạn sẽ nhận được may mắn với Rails sắp tới 4 Live, hãy xem this post and demo cho các bộ phận ngon ngọt
1

tôi nhận ra điều này là một chút cũ của một câu hỏi, nhưng đó là trên trang đánh giá cao nhất cho ember.js, vì vậy tôi figured tôi muốn thêm một chút.

Tôi đã sử dụng ember-model gần đây để xử lý ràng buộc dữ liệu RESTful. Nó có ít chuông và còi hơn, nhưng với nhu cầu của tôi thì nó khá là tốt. Về cơ bản, nó chỉ mở rộng chức năng mô hình để tích hợp hợp lý với một máy chủ đẩy các đối tượng JSON thông qua một giao diện REST chuẩn.

Các vấn đề liên quan