2015-01-24 5 views
1

Как связать текст, когда он не определен? Например имя недоступно:Knockout не удалось обработать привязку

<table id="recordTbl" data-bind="visible: records().length &gt; 0" class="table"> 
    <thead> 
    <tr> 
     <th class="col-md-4">ID</th> 
     <th class="col-md-4">Name</th> 
    </tr> 
    </thead> 
    <tbody data-bind="foreach: records"> 
    <tr> 
     <td data-bind="text: id"></td> 
     <td data-bind="text: name"></td> 
    </tr> 
    </tbody> 
</table> 

Я получаю эту ошибку:

Uncaught ReferenceError: Unable to process binding "text: function(){return name }" 
Message: name is not defined 
+1

Вы имеете в виду, что некоторые элементы массива 'records' не имеют свойства' name'? – nemesv

+0

Будет ли способ сделать это? Даже если объект не имеет свойства (например, имя, как в комментарии), можем ли мы сделать что-нибудь, чтобы остановить исключение? : O –

ответ

1

Вы можете ты $data связывание контекста свойство, которое всегда представляет текущую модель представления для доступа к name через него:

<tbody data-bind="foreach: records"> 
    <tr> 
     <td data-bind="text: id"></td> 
     <td data-bind="text: $data.name"></td> 
    </tr> 
    </tbody> 

При таком подходе KO не будет генерировать исключение, если один из элементов в records не имеет name Недвижимость.

Без $data идентификатор с именем name не определен. Однако $data.name всегда является допустимым выражением, оно просто возвращает undefined, если модель текущего вида не имеет свойства с именем name.

Смежные вопросы