Объедините два столбца, если они не нулевые, с привязкой к Knockout.js

Я использую Knockout.js в проекте бритвы MVC для привязки столбца таблицы с именем и фамилией.

<td><label class='required' data-bind="text: FirstName + ' ' + LastName" /><td/>

Он объединяется, но когда одно поле пусто, в выводе будет отображаться нуль.

Нравиться:

Jone Smith Null Smith Jone Null Null Null

Как я могу удалить этот нуль?


person user3286962    schedule 11.08.2014    source источник
comment
Попробуйте использовать его как функцию data-bind="text: FirstName() + ' ' + LastName()"   -  person Muhammad Raheel    schedule 11.08.2014


Ответы (3)


Вы можете использовать вычисляемое свойство:

viewmodel.FullName = ko.computed(function(){
     if (viewmodel.FirstName && viewmodel.LastName)
          return viewmodel.FirstName + ' ' + viewmodel.LastName
     else if(viewmodel.FirstName)
          return viewmodel.FirstName;
     else if (viewmodel.LastName)
          return viewmodel.LastName;  
     else
          return '';
});

А затем обновите привязку следующим образом:

<td><label class='required' data-bind="text: FullName" /><td/>
person Kenneth    schedule 11.08.2014

Я бы сказал, проверьте, есть ли значение в строке: например, if(FirstName)или FirstName.length > 0, и если да, вы можете установить FirstName = '';

person Linial    schedule 11.08.2014

A вычисляется с меньшим количеством случаев if else, чем Kenneths, и его можно использовать повторно.

function joinComputed() {
    var parts = arguments;
    return ko.computed(function() {        
        return ko.utils.arrayFilter(ko.utils.arrayMap(parts, function(part) {
            return ko.unwrap(part)
        }), function(part) {
            return part;
        }).join(" ");
    })
}

http://jsfiddle.net/6yLrjc5y/

person Anders    schedule 11.08.2014