2012-05-04 32 views
22

Ứng dụng Meteor cực kỳ đơn giản này đang ném một lỗi Template is not defined khi tải. Ứng dụng cơ bản giống với dự án soạn sẵn (meteor create), chỉ cần chia thành các thư mục máy chủ/máy khách/công cộng.Nguyên nhân "Mẫu không được xác định" trong Meteor?

Meteor có vẻ đang cố gắng hiển thị các thẻ Handlebars template trước khi đối tượng Mẫu chung thực sự sẵn sàng. Đến lúc tôi có thể vào giao diện điều khiển JS và gõ "Template", nó ở đó.

Tôi đã làm điều gì sai, hoặc đây có phải là lỗi thời gian không?

+0

Bạn bao gồm mẫu này để sử dụng ở đâu? Có vẻ như bạn đang cố gắng bao gồm mẫu trước khi tải meteor.js – dwerner

+0

Meteor xử lý bó và bao gồm tất cả các tệp js trong dự án của bạn, vì vậy không thể bao gồm mẫu trước meteor.js.Nếu tôi hiểu bạn đúng. Dù bằng cách nào, câu trả lời đã chọn cũng cho thấy vấn đề là gì. – mwcz

+1

Tôi gặp vấn đề này khi tôi chuyển 'UI.registerHelper' sang' Template.registerHelper' mới. Nó phải là giao diện 'UI' không được sử dụng được định nghĩa cho cả máy chủ và máy khách nhưng' Template' được định nghĩa cho chỉ máy khách. –

Trả lời

9

Hm, có lẽ đây sẽ giải quyết vấn đề của bạn:

Lưu ý rằng thẻ nội dung bao gồm tên mẫu nhưng không phải là mẫu:

<body> 
    {{> hello}} 
</body> 

<template name="hello"> 
    {{greet}} 
</template> 

Ngoài ra, lưu ý rằng ".greet" đề cập đến {{ chào mừng}}:

if (Meteor.isClient) { 
    Template.hello.greet = function() { 
    return "Hey!"; 
    }; 
} 

Vì vậy, vấn đề là bạn không thể có mẫu bên trong cơ thể. Thay vào đó, phần thân gọi mẫu với {{> hello}} như trong đoạn mã trên.

+4

Bây giờ là 'Meteor.isClient' và không phải là 'is_client' –

+0

nhờ nó làm việc cho tôi. –

0

Hãy thử Template.hello.this để vượt qua các dữ liệu vào {{}} này

27

Bạn cần phải chắc chắn trong tập tin .js của bạn mà gọi là Template được gói trong if (Meteor.isClient){}, nếu không Template toàn cầu var won' t có sẵn vì một lý do nào đó.

+2

Tại sao lại có hành vi này? Tôi có cần thủ thuật này ngay cả khi tôi sử dụng các thư mục máy khách/máy chủ khác nhau không? – Hamal000

+0

Tôi đã ở cùng một vị trí các thư mục riêng biệt cho máy khách và máy chủ. Sau khi tôi làm điều này, lỗi đã biến mất. Nhưng tôi không chắc chắn 100% liệu đây có phải là giải pháp thích hợp hay không. Bạn không cần phải làm điều này. Có lẽ máy chủ sao băng của tôi đã chết và tôi không biết rằng trình duyệt lưu trữ và có vẻ như ứng dụng vẫn chạy. – KJW

+0

Đây là những gì đã xảy ra với tôi, quên thêm '," client "' vào 'api.addFiles()' trong 'package.js'. –

0

Đây là vấn đề khởi tạo. Tôi đang sử dụng Meteor 1.0 và tôi đã giải quyết được sự cố bằng cách thêm Meteor.startup(function() {} hoặc một khối if tới Meteor.isClient.

Đây có thể là một lỗi, bởi vì các tài liệu trên thư mục đặc biệt nói như sau (tính đến nay):

Chủ đầu tư: Bất kỳ khách hàng thư mục có tên không được tải trên máy chủ. Tương tự như gói mã của bạn nếu (Meteor.isClient) {...}. Tất cả các tệp được tải trên máy khách sẽ tự động được ghép nối và rút gọn khi ở chế độ sản xuất. Trong chế độ phát triển, mỗi tệp được gửi riêng lẻ để gỡ lỗi dễ dàng hơn. Các tệp HTML trong ứng dụng Meteor được xử lý hơi khác một chút so với khung công tác phía máy chủ. Meteor quét tất cả các tệp HTML trong thư mục của bạn cho ba phần tử cấp cao nhất: <head>, <body><template>. Phần đầu và phần thân được nối riêng vào một đầu và phần thân, được truyền tới máy khách khi tải trang ban đầu.

Nhưng không có khởi tạo, điều này không thành công với "Lỗi mẫu không tìm thấy".

5

Nếu đây trong một gói chắc chắn rằng bạn có khuôn mẫu trong danh sách sử dụng api của bạn tức là

api.use ('khuôn mẫu', 'khách hàng');

Điều đó đảm bảo mã của bạn được chạy khi đối tượng Mẫu được khởi tạo.

+0

phải được chấp nhận câu trả lời – ZuzEL

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