2012-10-28 21 views
8

Tôi có đoạn mã sau:Làm cách nào để xác định đối tượng jQuery trong bản ghi?

var modal = { 
    content: '', 
    form: '', 
    $form: '', 
    $message: '', 
    $modal: '', 
    $submits: '', 
    href: '' 
} 

$.modal = function (options) { 
    var settings = $.extend({}, $.modal.defaults, options), 
     root = getModalDiv(), 
    function getModalDiv() { 
     var modal = $('#modal'); 
     return modal; 
    }; 
})(jQuery); 

modal.$modal = $.modal({ 
    title: link.title, 
    closeButton: true, 
    content: modal.content, 
    onClose: onModalClose, 
    minWidth: 315, 
    maxHeight: false, 
    width: false, 
    resizeOnLoad: true 
}); 
modal.$form = modal.$modal.find('.form'); 

Tôi nhận được một lỗi trỏ đến .find và nói:

Phát hiện tài sản không tồn tại trên các biến kiểu 'string'. Tôi hiểu những gì lỗi nói nhưng làm thế nào tôi có thể xác định $modal là một biến mà tôi có thể sử dụng .find trên?

Ngoài ra bây giờ tôi đang ở thế giới kiểu chữ là có cách nào tốt hơn cho tôi để xác định phương thức hơn ở đây, nơi tôi xác định nó như là một var?

+0

Tại sao bạn khởi tạo 'phương thức. $ Modal' dưới dạng chuỗi nếu không phải? Toàn bộ điểm của TypeScript là có một hệ thống kiểu chặt chẽ hơn, nếu tôi không sai. –

+0

@Felix - Nhưng đó là vấn đề của tôi. Tôi không chắc chắn những gì để khởi tạo phương thức. Tôi muốn nó giữ một đối tượng jQuery nhưng tôi không thể tìm ra cách để làm điều đó. –

+0

TBH Tôi không quen thuộc với TypeScript, nhưng bạn chắc chắn không khởi tạo một thuộc tính được cho là để giữ một đối tượng jQuery với một chuỗi rỗng. Có thể điều này sẽ giúp: http://stackoverflow.com/questions/12719529/using-jquery-plugin-in-typescript –

Trả lời

6

Việc gán chức năng mà mã của bạn đang thực hiện cho $.modal là, tôi giả định, không đầy đủ - tuy nhiên vì bạn đang hỏi cụ thể về việc xác định loại, tôi sẽ cố gắng và trả lời.

Vì vậy, điều đầu tiên, nếu bạn chưa: hãy lấy jquery.d.ts from codeplex và tham chiếu nó trong mã của bạn như được thực hiện bên dưới. Nó sẽ cung cấp cho bạn các khai báo kiểu cho jQuery, nó rất hữu ích khi làm việc với thư viện. Nó cũng sẽ cho phép bạn định nghĩa các thành viên được cho là đối tượng jQuery.

///<reference path="jquery.d.ts" /> 

Như một ví dụ, hãy nhìn vào IModal đó là một giao diện với 4 thành viên jQuery (Tôi mất một số dự đoán với những loại bạn muốn sử dụng trên các thành viên khác - họ có thể không được những gì bạn muốn) :

interface IModal { 
    content : string; 
    form : HTMLFormElement; 
    $form : JQuery; 
    $message: JQuery; 
    $modal : JQuery; 
    $submits: JQuery; 
    href : string; 
} 

việc kê khai giao diện thứ hai, JQueryStatic, chỉ cần tuyên bố một thành viên tĩnh mà có thể truy cập vào các đối tượng $ (xem chú thích) vì $ thực hiện JQueryStatic trong file jquery.d.ts.

interface JQueryStatic { 
    modal : any; 
}; 

Với điều này ngay từ bây giờ bạn có thể tạo đối tượng phương thức của bạn với loại thông tin rõ ràng được cung cấp bởi các giao diện IModal rằng nó thực hiện:

var modal : IModal = { 
    content : '', 
    form : null, 
    $form : null, 
    $message: null, 
    $modal : null, 
    $submits: null, 
    href : '' 
} 

Và bạn có thể gán chức năng của bạn đến $ .modal trên tài khoản của số JQueryStatic thêm vào:

$.modal = function (options) { 
    var settings = $.extend({}, $.modal.defaults, options), 
     root = getModalDiv(), 
     getModalDiv = function() { 
      var modal = $('#modal'); 
      return modal; 
     }; 

    ... 
})(jQuery); 

Với điều đó tại chỗ và nếu bạn sửa bài tập đó, dòng sau sẽ là được OK:

modal.$form = modal.$modal.find('.form'); 

Lưu ý: kinh nghiệm của tôi khi thêm thành viên vào giao diện hiện tại là tốt nhất - thường thì trình biên dịch không chọn chúng vì bất kỳ lý do gì. Tôi thấy điều này có nhiều khả năng là cơ sở mã của bạn phát triển nên rất khó để cô lập nguyên nhân chính xác. Chỉ cần một cái gì đó để giữ một mắt trên.

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