2012-11-09 24 views
9

Tôi có một ArrayController cho bộ chọn ngày với thuộc tính đếntừ. Giờ đây, khi người dùng chọn phạm vi ngày mới từ giao diện người dùng, cả hai số đếntừ thay đổi giá trị.Ember nhiều thay đổi về tài sản nhưng muốn kích hoạt sự kiện đơn lẻ

Vì vậy, một chức năng quan sát trên đếntừ được kích hoạt hai lần cho một thay đổi duy nhất trong phạm vi ngày.

Tôi muốn kích hoạt chức năng chỉ mỗi lần thay đổi phạm vi ngày. Bất cứ đề nghị làm thế nào để làm điều đó với ember

app = Ember.Application.create(); 

    app.Time = Ember.ArrayController.create({ 

     to: null, 
     from: null, 
     rootElement: "#time", 

     debug1: function() { 
      this.set('to', 1); 
      this.set('from', 2); 
     }, 

     debug2: function() { 
      this.setProperties({ 
       'to': 3, 
       'from': 4 
      }); 
     }, 

     debug3: function() { 
      this.beginPropertyChanges(); 
      this.set('to', 5); 
      this.set('from', 6); 
      this.endPropertyChanges(); 
     }, 

     search: function() { 
      alert('called'); 
     }.observes('to', 'from') 
    }); 

View in JS Fiddle

+0

gì về quan sát chỉ hoặc từ ? khi cả hai đang thay đổi khi người dùng chọn ngày nex, chỉ dựa vào một trong hai người có thể hoạt động không? –

+0

cũng có những cách khác để thay đổi và cũng từ. Vì vậy, người quan sát phải được trên cả hai –

+0

xem câu trả lời của tôi edited :) –

Trả lời

11

lẽ bạn có thể giới thiệu một tài sản tính trên fromto, và sau đó cắm người quan sát trên khách sạn này. Vì các CP được lưu trữ theo mặc định, tôi nghĩ người quan sát sẽ chỉ được kích hoạt một lần.

date: function(){ 
// return the computed date 
}.property('from', 'to') 

dateDidChange: function(){ 

}.observes('date') 

EDIT Cảm ơn thay vì chỉ violong của bạn, có vẻ như để làm việc sử dụng setProperties, hoặc bắt đầu/propertyChanges cuối http://jsfiddle.net/Sly7/zf2q3/1/

4

Bạn có thể quấn quan sát viên trong một Em.run.once

_dateDidChange: function(){ 
    Ember.run.once(this, 'dateDidChange'); 
}.observes('from', 'to'), 

dateDidChange: function() { 
    // should be called only once 
} 
+0

Tôi không nghĩ rằng cách tốt của nó để làm điều này. –

+0

@AnkurAgarwal Hum, tôi nghĩ rằng điều này là tốt hơn những gì tôi đã làm. Trên thực tế, tôi đã yêu cầu các cộng tác viên của Ember.js xem xét điều này. Đó là lý do tại sao anh ta đề xuất một cách giải quyết khác. –

+0

Ankur, bạn có thể ngoại suy không? Chúng tôi đang suy nghĩ về việc làm cho người quan sát không đồng bộ, vì vậy bạn sẽ không phải quấn nó, nó sẽ công việc. – Tchak

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