2013-01-26 26 views
13

Trong ứng dụng Meteor của tôi, bộ định tuyến Backbone chỉ hoạt động khi người dùng đăng nhập (thông qua gói tài khoản cơ sở). Nó thật kì lạ. Router này hoạt động tốt. Các chức năng showSaying() không được gọi là ở tất cả khi người dùng không đăng nhập.Ứng dụng Meteor - Bộ định tuyến đường trục không được gọi là

Dưới đây là mã số trong client.js trong thư mục khách hàng. Tôi có cần phải làm điều gì đó với phiên hoặc tự động xuất bản không?

AphorismView = Backbone.View.extend({ 
el: "#aphorism-item", 
initialize: function(){ 
    _.bindAll(this, "render"); 
    this.render(); 
}, 
render: function() { 
    this.$el.append("<p style='height:600px; background-color:blue;'>hi</p>"); 
} 
}); 

// Creates a route to view the selected aphorism 
var Aphorism = Backbone.Router.extend({ 
    routes: {  
     "saying/:id": "showSaying" 
    }, 
    showSaying: function (id) { 
     var aphorism_view = new AphorismView(); 
     alert('Saying id ' + id + '.'); 
    } 
}); 

//establishes the router 
appRouter = new Aphorism; 

//Sets up backbone 
Meteor.startup(function() { 
    filepicker.setKey("AerIOvsmAQRGaNdEv0judz"); 
    filepicker.constructWidget(document.getElementById('attachment')); 
    Backbone.history.start({pushState: true}); 
}); 
+0

Tôi nghi ngờ việc này phải làm với tốc độ/thứ tự tải và khi đăng nhập, tải sẽ lâu hơn, dẫn đến appRouter sẵn sàng đúng giờ. Thử đặt khai báo appRouter bên trong Meteor.startup. – Rahul

+0

đã cố gắng Rahul này - đã không làm việc – squeezemylime

+0

Tôi chưa làm việc trên Win8 Metro Apps, vì vậy tôi không biết nếu có một bàn điều khiển phát triển có sẵn như trong trình duyệt. Nếu có, tôi sẽ gọi 'appRouter = new Aphorism;' ngay trước 'Backbone.history.start ({pushState: true});' và gán appRoute cho một biến toàn cục để xem nó có được khởi tạo hay không. – wowpatrick

Trả lời

1

Vấn đề của bạn dường như không phải là vấn đề Backbone.js.

Bạn đã thử đặt câu lệnh console.log bên trong cuộc gọi lại startup() để xác minh rằng nó thực sự đang được gọi trong mọi trường hợp? Nếu không, thì đó là giữa bạn và Meteor.

1

bạn đã thử đợi DOM sẵn sàng chưa? ví dụ: $(Backbone.history.start)

1

Thử kéo khai báo lịch sử xương sống bên ngoài Meteor.start. Không có lý do gì để nó ở đó. Ngoài ra, tôi tin rằng showSaying sẽ chỉ được gọi nếu bạn đi đến một tuyến đường có thông số id (nghĩa là, bạn không thể chỉ cần truy cập http://app/saying/).

Ngoài ra, bạn có thể cần phải gọi theo cách thủ công approuter.navigate để router hoạt động nếu bạn đang cố điều hướng theo chương trình. (Tôi không biết nếu bạn đang có, nhưng nó có thể là vấn đề).

Ngoài ra, tôi không thể tìm thấy bất kỳ vấn đề nào với đoạn mã cụ thể này. Vấn đề có thể là ở nơi khác, nếu không có gì tôi đề nghị giải quyết nó.

Để biết ví dụ về triển khai bộ định tuyến hoạt động, bạn có thể xem https://github.com/Benaiah/Athenaeum/blob/master/client/router.coffee (tuyên bố từ chối trách nhiệm: từ ứng dụng tôi đang viết) và cố gắng tìm bất kỳ khác biệt nào khác.

Hy vọng điều đó sẽ hữu ích.

+0

Tôi sẽ kiểm tra các đề xuất này, cảm ơn – squeezemylime

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