2012-07-07 34 views
6

Đây là ví dụ sử dụng bộ định tuyến emberjs http://jsbin.com/agameq/edit. Bây giờ tôi muốn có một số hoạt hình hiển thị, như fadeIn hoặc fadeOut, khi tuyến đường thay đổi. tôi nên làm gì?Tôi có thể cung cấp cho chế độ xem hoạt ảnh hiển thị trong emberjs

+0

Gần đây tôi đã thêm một [ dự án trong GitHub] (https://github.com/MilkyWayJoe/ember-router-with-webapi) là quá trình học tập của riêng tôi, bạn có thể muốn xem xét (nó vẫn còn khá thô nhưng tôi sẽ cập nhật khi tôi tiến bộ) – MilkyWayJoe

+0

@MilkyWayJoe Ok, tôi sẽ ~ cảm ơn ~ – aisensiy

Trả lời

9

Mỗi View trong ember có một phương thức có tên didInsertElement:

Được gọi là khi các yếu tố của quan điểm đã được đưa vào DOM. Ghi đè chức năng này để thực hiện bất kỳ thiết lập nào yêu cầu phần tử trong phần thân tài liệu.

Tất cả các quan điểm ember cũng có một $ đó là một tham chiếu đến jQuery, vì vậy bạn có thể bọc một số yếu tố trong quan điểm của bạn với nó và áp dụng bất kỳ thay đổi nào đó như:

// this will animate only the tag h2, which in your case is the title of the users view 
App.UsersView = Ember.View.extend({ 
    templateName: 'users', 
    didInsertElement: function() { 
     this.$('h2').animate({ fontSize: "3em" }, 900); 
    } 
}); 

Hoặc bạn có thể gọi nó mà không có đối số (như $()) để trả về khung nhìn hiện tại được bao bọc bởi jQuery.

Để animate một quan điểm như bạn nhập vào mà xem/tuyến đường, làm điều này trong App.UsersView của bạn:

// this will animate the entire view 
App.UsersView = Ember.View.extend({ 
    templateName: 'users', 
    didInsertElement: function() { 
     this.$().animate({ fontSize: "3em" }, 900); 
    } 
}); 

(Note: phim hoạt hình của tôi là khá khập khiễng, nhưng nó chỉ là để hiển thị, nơi để gọi phương pháp, làm một hình ảnh động sản)

Dưới đây là một phiên bản sửa đổi của your JSBin

+0

Cảm ơn bạn. Rất thú vị. Tôi không biết rằng Ember đã thực hiện didInsertElement lấy cảm hứng từ Cocoa. Ví dụ của bạn có sử dụng hàm jQuery.animate không? Có nghĩa là didInsertElement từ Ember và sau đó chuyển nó cho jQuery cho các công cụ UX, phải không? – nembleton

+1

@nembleton Đó là chính xác, tại thời điểm đó tôi gọi hàm jQuery ['animate'] (http://api.jquery.com/animate/), bởi vì Ember đã cung cấp cho nó lượt xem của nó, tất cả những gì bạn cần có tham chiếu tập lệnh đến jQuery – MilkyWayJoe

+0

Cảm ơn rất nhiều. Người trả lời của bạn đã giải quyết được những vấn đề lớn của tôi. Tôi muốn sử dụng emberjs để làm một số webapp và ux thực sự quan trọng cho điều đó. Nhưng ngay bây giờ các hình ảnh động đang sử dụng jQuery có thể các hình ảnh động thay thế bằng thủ thuật css3? – aisensiy

5

Tiếp theo câu trả lời từ @MilkyWayJoe, có lẽ bạn muốn ẩn Xem trước inserti ng nó, bằng cách thiết lập isVisible tài sản để false:

App.UsersView = Ember.View.extend({ 
    templateName: 'users', 

    isVisible: false, 

    didInsertElement: function() { 
     var self = this; 
     this.$().fadeIn(700, function(){ 
      self.set('isVisible', true); //inform observers of `isVisible` 
     }); 
    } 
}); 

Hoặc sử dụng this animation Mixin, cho phép bạn để animate xem bằng cách thay đổi một tập hợp các thuộc tính CSS quan sát:

App.UsersView = Ember.View.extend(JQ.Animate, { 
    templateName: 'users', 

    isVisible: false, 

    // Observed CSS properties 
    cssProperties: ['display'], 

    // Optional animation properties 
    duration: 700, 
    easing: 'easeInOutCubic', 

    didInsertElement: function() { 
     this.set('display', 'block'); 
    }, 

    afterAnimate: function() { 
     this.set('isVisible', true); 
    } 
}); 
+0

Ồ, đó là tốt đẹp. Tôi sẽ đọc bài báo và thử. Làm cách nào bạn có thể biết thông tin này bằng cách đọc mã nguồn? – aisensiy

+0

Mã nguồn được tìm thấy [ở đây] (http://cloud.github.com/downloads/emberjs/ember.js/ember-latest.js) (là mới nhất) có tất cả các nhận xét trái ngược với [tài liệu] (http://emberjs.com/documentation/) chưa được cập nhật đầy đủ (vì hầu hết các nỗ lực đều tập trung vào [1.0 mốc] (https://github.com/emberjs/ember.js/issues? labels = & milestone = 1 & page = 1 & state = open)). Tôi cũng đề xuất [Google cho "Ember Gist"] (https://www.google.ca/#hl=vi&q=ember+gist) và bạn sẽ nhận được một số tài nguyên tuyệt vời. – MilkyWayJoe

+0

Hi, làm thế nào tôi có thể truy cập các yếu tố dom trong bộ điều khiển ... Ví dụ, tôi tải một số yếu tố trong bộ điều khiển và tôi cần phải thay đổi kích thước chiều rộng của cha mẹ của các phần tử. Làm thế nào tôi có thể nhận được dom mẹ và thiết lập chiều rộng của nó trong bộ điều khiển? – aisensiy