Tôi cần thiết lập mẫu khung nhìn của Backbone dựa trên ngày mà người dùng đã chọn trong quá khứ hay tương lai cũng như chuyển đổi sau này khi bộ sưu tập thay đổi kéo dữ liệu từ một ngày khác. Làm thế nào để tôi làm điều này? Tôi nghĩ rằng tôi sẽ có thể thiết lập các mẫu để một chức năng trả về chuỗi chọn chính xác dựa trên việc tôi đang trong quá khứ hay không, nhưng điều này không hoạt động.Backbone tự động chuyển đổi mẫu
pR.views.ScheduleJobView = Backbone.Marionette.ItemView.extend({
tagName: "tr",
// NEED A WAY TO SWITCH THIS TOO
template: "#schedule-job-template"
});
pR.views.ScheduleJobsView = Backbone.Marionette.CompositeView.extend({
// DOESN'T WORK
template: function() {
if (this.isPast)
return "#schedule-jobs-past-template";
else
return "#schedule-jobs-template";
}, itemView: pR.views.ScheduleJobView,
itemView: pR.views.ScheduleJobView,
itemViewContainer: "tbody",
// Defaults for the model's url
baseUrl: "/schedules/day/",
baseApiUrl: "/api/schedule/day/",
// Empty object to store url parameters
urlParameters: {},
initialize: function() {
pR.vent.bindTo("change:parameters", this.changeUrl, this);
this.model.url = this.baseApiUrl;
},
onRender: function() {
console.log("Rendering Jobs View");
},
// Change the main model's url
changeUrl: function (parameters) {
// merge new parameters with old ones
this.urlParameters = _.extend(this.urlParameters, parameters);
var url = "";
var apiUrl = this.baseApiUrl;
_.each(this.urlParameters, function (value, parameter) {
// Add each parameter segment to the url
url = url + parameter + '/' + value + '/';
apiUrl = apiUrl + parameter + '/' + value + '/';
});
this.model.url = apiUrl;
console.log("Updated CurrentDay model url to " + apiUrl);
this.model.fetch();
console.log("Navigating to " + url);
pR.routers.appRouter.navigate(url);
},
// Check if we are in the past
isPast: function() {
var year = this.urlParameters.year;
var month = this.urlParameters.month;
var day = this.urlParameters.day;
var selectedDate = Date(year, month, day);
if (selectedDate < Date()){
return true;
} else {
return false;
}
}
});
Lưu ý rằng tôi đang sử dụng chế độ xem tổng hợp của Marionette tại đây, vì vậy tôi cũng cần cách thay đổi mẫu của itemView dựa trên khung thời gian. Tôi chắc chắn sẽ cởi mở để tiếp cận điều này một cách khác nếu chiến lược cơ bản của tôi bị suy nghĩ kém.
mát, mà làm việc! Tôi nghĩ rằng tôi đã thử một cái gì đó như thế này, nhưng tôi phải làm điều gì đó sai trái. Bạn có cách nào để thiết lập mẫu của itemView dựa trên khung thời gian không? –
Chỉ cần một lưu ý: Marionette sử dụng để chấp nhận một chức năng cho một mẫu mà sẽ trả về một bộ chọn động. Bây giờ hàm nó chấp nhận được sử dụng như hàm mẫu đã biên dịch. – jsoverson
nó làm việc cho tôi. Bạn cũng có thể làm điều này trong một hàm khác và gọi this.render() sau đó và nó sẽ chuyển đổi mẫu. Nội dung thú vị! –