dojo 1.8:使用数据库中的项目填充选择框,包括空值

时间:2013-05-02 01:33:56

标签: dojo

您好我只想填充select或comboBox。 我能够将searchAttr填充到JSON中的任何字符串。但是当存在空值时则不是这样。

JSON字符串:

[{"batch":"0000001000"},{"batch":"0000"},{"batch":""},{"batch":null}]

道场代码:

var selBatch = new ComboBox //located at the left side of the page and it is the second select box in a row
(
    {   id:'ID_selBatch',
        value:'',
        searchAttr:'batch',
        placeHolder:'Select...',
        style:{width:'150px'},
    },  'node_selBatch'
);

on(selTest, 'change', function(valueCard)
{
    var selectedTest = this.get('displayedValue');
    var selBatch = registry.byId('ID_selBatch');
    console.debug('Connecting to gatherbatches.php ...');
    request.post('gatherbatches.php',
    {   data:{nameDB:registry.byId('ID_selPCBA').value, nameCard : valueCard},
        handleAs: "json"}).then
        (
            function(response)
                {
                    var memoStore2 = new Memory({data:response});
                    selBatch.set('store', memoStore2);
                    selBatch.set('value','');
                    console.debug('List of batches per Test is completed! Good OK! ');
                },
            function(error)
                {
                    alert("Batch's Error:"+error);
                    console.debug('Problem: Listing batches per Test in select Test is BAD!');
                }
        );
     selBatch.startup();

});

错误:

TypeError: _32[this.searchAttr] is null
          defer()                             -> _WidgetBase.js (line 331)
          _3()                                ->  dojo.js (line 15)
          _f.hitch(this,fcn)();               -> _WidgetBase.js (line 331)

请注意,虽然在选择框中填充空值可能很奇怪,但这些空值与数据库中其他列中的数据相关,因此包含空值以便稍后可以应用mysql脚本。或者你还有其他更好的建议吗?

克莱门特

1 个答案:

答案 0 :(得分:0)

您可以创建QueryFilter as in this jsfiddle来实现您的目标,但拥有两个数据项可能更简单。您的原始模型可能具有null batch属性,以及您传递给ComboBox使用的商店的模型。

但无论如何,这可行:

function createQueryFilter(originalQuery, filter) {
    return function () {
        var originalResults = originalQuery.apply(this, arguments);
        var results = originalResults.filter(filter);
        return QueryResults(results);
    };
}

var memoStore = new Memory({
    data: data
});
memoStore.query = createQueryFilter(memoStore.query, function (item) {
    console.log(item);
    return !!item.batch;
});

和虚拟数据:

function createData1() {
    var data = [];
    for (var i = 0; i < 10; i++) {
        data.push({
            name: "" + i,
            batch: (0 === i % 2) ? "batch" + i : null
        });
    }
    return data;
}

截图。在我的示例中,奇数编号的批处理项为空。

enter image description here