#datagrid #flex4 #htmlspecialchars #labelfunction
#datagrid #flex4 #htmlspecialchars #функция маркировки #labelфункция
Вопрос:
у меня есть datagrid (6 столбцов), который отображает строки из базы данных. Я пытаюсь использовать labelфункцию для экранирования специальных символов html в строке (например, amp;apos, amp;amp и т.д.).
Я нашел это в сети :
protected function makeSpecialChars(item:Object,dgName:DataGridColumn):String {
var s:String = agentName.dataField;
var v:String = item.s;
return new XMLDocument(v).firstChild.nodeValue;
}
Однако, когда я делаю это, я получаю сообщение об ошибке: не удается получить доступ к свойству или методу нулевой ссылки на объект.
Это отлично работает, когда я изменяю приведенный выше код следующим образом :
protected function makeSpecialChars(item:Object,agentName:DataGridColumn):String {
return new XMLDocument(item.computer_name).firstChild.nodeValue;
}
где имя_компьютера — это поле данных этого столбца datagrid.
Размещение кода Datagrid :
<components:DoubleClickDataGrid xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:components="components.*"
width="100%" height="100%"
editable="true"
focusColor="#CEDA9B"
rollOverColor="#CEDA9B"
selectionColor="#84A207"
dataProvider="{invList}"
creationComplete="doubleclickdatagrid1_creationCompleteHandler(event)"
itemEditEnd="handleInventoryEdit(event)">
<components:columns>
<mx:DataGridColumn width="120" dataField="computer_name" headerText="Computer Name" textAlign="center" labelFunction="makeSpecialChars"/>
<mx:DataGridColumn dataField="path" headerText="Path" textAlign="center" labelFunction="makeSpecialChars"/>
<mx:DataGridColumn width="110" dataField="computer_type" textAlign="center" headerText="Computer Type" />
<mx:DataGridColumn width="180" dataField="username" headerText="Username" textAlign="center" />
<mx:DataGridColumn width="90" dataField="ip_address" headerText="IP Address" textAlign="center" />
<mx:DataGridColumn width="130" dataField="mac_address" headerText="MAC Address" textAlign="center" />
<mx:DataGridColumn width="180" dataField="computer_model" headerText="Computer Model" textAlign="center" />
<mx:DataGridColumn width="70" editable="false" headerText="Actions" textAlign="center" itemRenderer="renderers.ActionRenderer" />
</components:columns>
На данный момент это работает нормально (применяется labelfunction только к 2 столбцам).. Но я хочу применить функцию label ко всем столбцам…
Ответ №1:
Попробуйте использовать следующее:
protected function makeSpecialChars(item:Object,agentName:DataGridColumn):String {
var s:String = agentName.dataField;
var v:String = item[s];
return new XMLDocument(v).firstChild.nodeValue;
}
Комментарии:
1. да, я тоже это пробовал… Я получаю ту же ошибку .. фактически я начал так, но поскольку это не сработало, я попробовал с item.s .. безуспешно : (
2. В какой строке у вас NPE? Я прав, если это находится в
return
инструкции?3. NPE?? мой код выглядит точно так, как вы его опубликовали. .. ничего не изменилось
4. Вы сказали, что у вас NPE (исключение нулевого указателя) «Не удается получить доступ к свойству или методу ссылки на нулевой объект». В какой строке это происходит?
5. Вы должны поместить точку останова в свою функцию label и увидеть реальное значение
v
. Есть ли у него первый ребенок и т.д.