Dojo:设置商店进行模板过滤选择

时间:2014-02-12 11:32:26

标签: templates select dojo store

为了熟悉dojo,我正在开发一个由以下组件组成的测试项目:

  • 数据网格(以声明方式创建),填充JSON数据;单击一行将打开一个包含表单(作品)的对话框
  • 表单(从模板创建),带有几个输入字段,填充了网格存储(工作)中的数据
  • FilteringSelect(表单的一部分)(不起作用,没有内容)

FilteringSelect包含动态数据。为了保持较低的数据流量,我认为在加载整个页面时获取此数据并将其传递到模板初始化函数是明智的。

事实上,我真的不知道如何将商店分配给FilteringSelect。

非常感谢任何帮助。

这是我的代码。我将它简化为我认为相关的部分,以便更容易理解。

网格部分:

    var data_list = fetchPaymentProposalList.fetch();

    /*create a new grid*/
    var grid = new DataGrid({
        id: 'grid',
        store: store,
        structure: layout
    });

        // store for FilteringSelect
    var beneficiaryList = FetchBeneficiaryList.fetch();
    var beneficiaryListStore = new Memory({
        identifier : "id",
        data : beneficiaryList
    });

    return   {
            // function to create dialog with form
        instantiate:
            function(idAppendTo)   {
                /*append the new grid to the div*/
                grid.placeAt(idAppendTo);

                /*Call startup() to render the grid*/
                grid.startup();
                grid.resize();

                dojo.connect(grid, "onRowClick", grid, function(evt)   {
                    var rowItem = this.getItem(evt.rowIndex);
                    var itemID = rowItem.id[0];
                    var store = this.store;


                    var paymentProposalForm = new TmpPaymentProposalForm();
                    paymentProposalForm._init(store.getValue(rowItem, "..."), ..., beneficiaryListStore);
                });
        }
    };

受益人名单如下:

return { 12: { id : 1, name : "ABC" }};

模板中的FilteringSelect如下所示:

<input data-dojo-type="dijit/form/FilteringSelect" name="recipient" id="recipient" value="" data-dojo-props="" data-dojo-attach-point="recipientNode" />

模板初始化代码如下所示:

_init: function(..., beneficiaryListStore)   {
            this.recipientNode.set("labelAttr", "name");
            this.recipientNode.set("searchAttr", "name");
            // here should come the store assignment, I guess???

            var dia = new Dialog({
                content: this,
                title: "ER" + incoming_invoice,
                style: "width: 600px; height: 400px;"
            });
            dia.connect(dia, "hide", function(e){
                dijit.byId(dia.attr("id")).destroyRecursive(); 
            });
            dia.show();
        }

1 个答案:

答案 0 :(得分:1)

对于任何有兴趣的人,这是我的解决方案:

var beneficiaryList = FetchBeneficiaryList.fetch();
    var beneficiaryData = {
        identifier : "id",
        items : []
    };
    for(var key in beneficiaryList)
    {
        if(beneficiaryList.hasOwnProperty(key))
        {
            beneficiaryData.items.push(lang.mixin({ id: key }, beneficiaryList[key]));
        }
    }
    var beneficiaryListStore = new Memory({
        identifier : "id",
        data : beneficiaryData
    });

这就是诀窍