2012-06-12 40 views
26

Tôi là người mới bắt đầu trong Knockout và tôi phải nói rằng tôi thường bị nhầm lẫn về thời điểm sử dụng (). Có bất kỳ mẹo/lừa chung nào liên quan đến thời điểm bạn sử dụng () để chống lại thời điểm bạn không làm vì hiện tại tôi chỉ đang thực hiện thử và sai. Nếu liên kết ném lỗi hoặc không cập nhật các giá trị tôi xóa () khác tôi đặt.Khi nào tôi nên sử dụng dấu ngoặc đơn trong loại bỏ

Trả lời

18

Bạn sử dụng () khi loại bỏ khi sử dụng các quan sát hoặc khi thực hiện bất kỳ phương pháp nào khác. Quan sát Knockout là các hàm, được gọi để trả lại cho bạn những gì bạn đang tìm kiếm hoặc cho phép bạn gán các giá trị mới.

Trong loại trực tiếp bạn sử dụng object.property() để truy lục giá trị và object.property(newValue) để chỉ định giá trị cho thuộc tính đó.

Khi loại trực tiếp website kiểm tra tài liệu, cụ thể là phần trên observables, hiển thị cho bạn việc sử dụng () khi truy vấn và viết quan sát.

Để quote:

var myViewModel = { 
    personName: ko.observable('Bob'), 
    personAge: ko.observable(123) 
}; 
  • Để đọc giá trị hiện tại của thể quan sát được, chỉ cần gọi các quan sát không có tham số. Trong ví dụ này, myViewModel.personName() sẽ trả lại 'Bob' và myViewModel.personAge() sẽ trả về 123.

  • Để viết giá trị mới cho quan sát được, hãy gọi cho quan sát và chuyển giá trị mới dưới dạng tham số. Ví dụ: gọi số myViewModel.personName ('Mary') sẽ thay đổi giá trị tên thành 'Mary'.

  • Để ghi giá trị cho nhiều thuộc tính quan sát được trên đối tượng mô hình, bạn có thể sử dụng cú pháp chuỗi. Ví dụ, myViewModel.personName ('Mary'). Nhân vật (50) sẽ làm thay đổi giá trị tên để 'Mary' và giá trị tuổi đến 50.

Knockout của interactive tutorial cũng khá đẹp và cũng đáng để trải qua.

3

Về cơ bản bất cứ khi nào bạn làm việc với giá trị quan sát (mảng hoặc cách khác), bạn nên sử dụng dấu ngoặc đơn để lấy giá trị và đặt giá trị.

var something = ko.obserbable(); 
something(5); //set value 
console.log(something()); //get value: 5 

Lý do được rằng hầu hết các trường JS không hỗ trợ getter và setter cho tài sản, vì vậy quan sát đã được thực hiện như thế này để có được khắc phục hạn chế này.

48

Tôi cảm thấy như các câu trả lời hiện có bỏ qua một điểm rất quan trọng của sự nhầm lẫn: data-bind thuộc tính.

Đúng là bạn sử dụng các parens khi bạn đang ở trong Javascript, và nhận hoặc thiết lập các quan sát. Nhưng khi bạn đang viết data-bind="text: property", bạn bỏ qua các số parens ngay cả khi làm việc với các quan sát.

Sửa

Như đã đề cập trong các bình luận dưới đây, các ràng buộc đó là những biểu hiện, hoặc tài sản tiếp cận của observbles, đòi hỏi Parens

visible: personName().length > 0 
visible: person().Name().length > 0 
visible: person().isVisible 

Lưu ý rằng cuối cùng một personisVisisble đều quan sát, nhưng các tài sản cuối cùng không sử dụng parens! Lý do cho điều này là chúng ta sẽ chuyển một giá trị tới ràng buộc thay vì quan sát, và nó sẽ không cập nhật.

+5

Điểm tốt, ngoại lệ duy nhất là nếu một biểu thức JavaScript được sử dụng bên trong thuộc tính ràng buộc dữ liệu, trong đó dấu ngoặc đơn ** được ** yêu cầu, ví dụ: 'visible: personName(). length> 0' – benrwb

+0

Dấu ngoặc đơn cũng được yêu cầu khi sử dụng các liên kết ảo dựa trên nhận xét, như trong:' '. Tôi không hiểu tại sao đây là trường hợp, nhưng như của 2.3.2, nó là sự thật. – x0n

+0

Xem http://stackoverflow.com/a/11318720/1154642 để biết ví dụ khác về việc sử dụng một quan sát được trong một biểu thức. – bryanbraun

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