2014-09-30 17 views
6

Sử dụng Meteor 0.9.3 và sắt: bộ định tuyến 1.0.0-pre2, lỗi này hiển thị trên bảng điều khiển ngay cả khi sắt: bố cục đã được cài đặt, xem bên dưới:Lỗi không bắt buộc: Không có Iron.Layout được tìm thấy để bạn không thể sử dụng năng suất

willems-mini:iron willem$ meteor add iron:[email protected]=1.0.0-pre2 
added iron:location at version 1.0.0-pre2 
added iron:dynamic-template at version 1.0.0-pre2 
added iron:router at version 1.0.0-pre2 
added iron:layout at version 1.0.0-pre2 
added iron:middleware-stack at version 1.0.0-pre2 
added iron:url at version 1.0.0-pre2 
added iron:controller at version 1.0.0-pre2 
added iron:core at version 1.0.0-pre2 

iron:router: Routing specifically designed for Meteor 

không có gói khác, chỉ cần giá trị mặc định cho thiên thạch:

willems-mini:iron willem$ meteor list 
autopublish  1.0.0 Publish the entire database to all clients 
insecure   1.0.0 Allow all database writes by default 
iron:router  1.0.0-pre2 Routing specifically designed for Meteor 
meteor-platform 1.1.1 Include a standard set of Meteor packages in your app 

tôi cố gắng để chạy một ứng dụng rất đơn giản:

1 javascript file:

012.
Router.route('/', function() { 
    this.render('home'); 
}); 

if (Meteor.isClient) { 
    Template.home.events({ 
     'click button': function() { 
      console.log('click!'); 
     } 
    }); 
} 

và 1 tập tin html:

<head> 
    <title>iron router test</title> 
</head> 

<body> 
    {{> defaultLayout}} 
</body> 


<template name="defaultLayout"> 
    <header> 
     {{> yield "header"}} 
    </header> 

    <article> 
     {{> yield}} 
    </article> 

    <footer> 
     {{> yield "footer"}} 
    </footer> 
</template> 


<template name="home"> 
    {{#contentFor "header"}} 
     <button>click header</button> 
    {{/contentFor}} 

    <button>click</button> 

    {{#contentFor "footer"}} 
     <button>click footer</button> 
    {{/contentFor}} 
</template> 

Trả lời

7

Đây không phải là cách iron:router bố trí có nghĩa vụ phải làm việc.

Loại bỏ bao gồm cho phép của bạn bố trí trong cơ thể:

{{! this is WRONG, remove the body tag altogether }} 
<body> 
    {{> defaultLayout}} 
</body> 

Nơi bạn xác định layoutTemplate là trong RouteController:

Router.route('/', function() { 
    this.render('home'); 
},{ 
layoutTemplate:"defaultLayout" 
}); 

Tuyên bố một cách rõ ràng của bạn RouteController s thường là một mẫu thiết kế đẹp hơn.

lib/router.js

Router.route("/",{ 
    // give the route a name so it figures out itself to use : 
    // - HomeController 
    // - a template name "home" 
    name:"home" 
}); 

lib/controllers/lib/default-layout.js

DefaultLayoutController=RouteController.extend({ 
    layoutTemplate:"defaultLayout" 
}); 

lib/controllers/home.js

HomeController=DefaultLayoutController.extend({ 
    // 
}); 
+0

Điều này giải quyết được vấn đề (cảm ơn), tuy nhiên, nó để lại cho tôi một câu hỏi khác: Tôi hơi ngạc nhiên khi thấy rằng các nhấp chuột bắt nguồn từ các khu vực có tên sản lượng ('tiêu đề' và 'chân trang') không kết thúc lên dưới dạng sự kiện cho mẫu 'nhà riêng'. Tôi chỉ có thể thấy các sự kiện nhấp chuột này trong trình xử lý sự kiện của mẫu 'defaultLayout'. Có cách nào để nhận các sự kiện này được chú ý trong trình xử lý sự kiện mẫu 'nhà' không? – willemx

+1

Chỉ cần tìm cách để thực hiện việc này: Tôi đã sử dụng tính năng bộ định tuyến sắt mới để xác định trình xử lý sự kiện trên bộ điều khiển tuyến đường. Bằng cách này tôi có thể nhận được tất cả các sự kiện mẫu 'nhà' ở một nơi. – willemx

2

Vâng, giống như lỗi của bạn nói rằng bạn đang bỏ lỡ một bố cục sắt.

thể trông giống như thế này trong lib/router.js của bạn hoặc bất cứ nơi nào bạn giữ đang router của bạn:

Router.configure({ 
    layoutTemplate: 'layout', 
    loadingTemplate: 'loading' 
}); 

Và vì vậy tương ứng <template name="layout"> nên có mặt ở đó.

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