sproutcore задает цвет метки динамически в зависимости от текущей даты

Я переписываю пользовательский вид в обычный вид. Например

Pseudo code
if (date = today) {
    context.push('...; style="color:red; ...}
else {
    context.push('...; style="color:black; ...}
;

становится

mondayLabelView: SC.LabelView.extend({
        layout: {top:90, left:700, width:200, height:18},
        classNames: ['App-monday'],
        valueBinding: SC.Binding.oneWay('App.someController.selectedMondayDate'),
        }),

Вопрос, как переписать часть динамического цвета?

2 ответа

Решение

Я бы предложил использовать classNameBindings свойство динамически добавлять класс CSS. Таким образом, вам не нужно использовать style тег.

Вы можете узнать больше об этом на http://blog.sproutcore.com/classnamebindings-easy-dynamic-css/ но основная идея заключается в следующем:

mondayLabelView: SC.LabelView.extend({
   layout: {...},
   valueBinding: SC.Binding.oneWay('App.someController.selectedMondayDate'),
   isToday: function() {
     // Psuedo-code, you'll probably need SC.DateTime to actually compare the dates
     return this.get('value') == today;
   }.property('value'),
   classNameBindings: ['isToday:date-is-today'],
})

Тогда в вашем CSS у вас будет что-то вроде:

.date-is-today {
  color: red;
}

Как абсолютный (синтаксис) новичок, я не знаю, что предложенное утверждение "вернуть this.get(" значение ") == сегодня;" точно означает, что это часть "== сегодня"?

Может быть, просить слишком много, но сравнить даты и установить возвращаемое значение, о котором я думал

tuesdayLabelView: SC.LabelView.extend({
    layout: {top:90, left:500, width:200, height:18},
    valueBinding: SC.Binding.oneWay('App.someController.selectedTuesdayDate'),
    classNameBindings: ['isToday:date-is-today'],
    isToday: function(){
        var comptuesday = this.get('value');
        var comptoday = SC.DateTime.create().toFormattedString('%A, %d %b');
        if (comptuesday === comptoday) {
            return 'date-is-today';
            } else {
            return 'normal-date';
            };
        }.property('value'),
        }),

Вероятно, не самый короткий путь или красивый синтаксис, но это работает, какие-либо дальнейшие предложения для лучшего синтаксиса?

Другие вопросы по тегам