Bir kullanıcının o tarihin geçmişte mi yoksa gelecekte mi olduğuyla ilgili bir Backbone görünümü şablonunu ayarlamam gerekiyor. Bunu nasıl yaparım? Şablonu, geçmişte olup olmadığına göre doğru seçici dizeyi döndüren bir işleve ayarlayabileceğimi düşündüm, ama bu işe yaramıyor. Burada ben de kukla en kompozit görüşlerini kullanıyorumOmurga dinamik olarak şablonları değiştirme
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;
}
}
});
Not, bu yüzden de zamanlamasına göre itemView şablonunu değiştirmek için bir yol gerekir. Temel stratejimin iyi düşünülmemesi durumunda buna farklı şekilde yaklaşmaya kesinlikle açıkım.
Serin (Ben googling buydu) Ben belgelerinde gördüm biliyorum GetTemplate adında bir işlev bunun için inşa yoktur, yani çalışıyor! Böyle bir şey denedim sanıyordum, ama yanlış bir şey yapmış olmalıyım. ItemView'un şablonunu zamana göre ayarlamak için herhangi bir yolunuz var mı? –
Sadece bir not: Kukla, dinamik bir seçici döndüren bir şablon için bir işlevi kabul etmek için kullanılırdı. Şimdi kabul ettiği işlev derlenmiş şablon işlevi olarak kullanılır. – jsoverson
benim için çalıştı. Bunu başka bir işlevde de yapabilir ve daha sonra this.render() öğesini çağırabilir ve şablonu değiştirir. Eğlenceli şeyler! –