Суммируйте сумму из сетки и отобразите в текстовом поле в sencha

#javascript #jquery #extjs

#javascript #jquery #extjs

Вопрос:

У меня есть имя представления PurchaseReport.js

 Ext.define("App.view.tabs.PurchaseReport", {
extend: "Ext.panel.Panel",
alias: "widget.PurchaseReportTab",
requires: [
        "App.model.PurchaseReport", "Ext.toolbar.Toolbar"
],
border: false,
layout: "fit",
items: [
    App.Util.buildBrowseConfig({}, {
        controller: "PurchaseReport",
        primaryKeyField: "PurchaseReportId",
        stateful: true,
        stateId: "App.view.windows.PurchaseReport-grid",

        columns: [
          { dataIndex: "PurchaseCost", filter: true, header: "Purchase Cost", width: 150 }
        ],
        features: [{ ftype: "filters", autoReload: false, local: true }],
        store: { model: "App.model.PurchaseReport", sorters: [{ property: "Name", direction: "asc" }],
        height: 200,
        width: 400,
        bbar: [
        {
            dataIndex: "PurchaseCost",
            reference: 'purchaseCostField',
            xtype: 'textfield',
            name: 'Total',
            fieldLabel: 'Total',
            allowBlank: false
        }
        ],
        renderTo: Ext.getBody()

       }
    })
 ]
});
  

Это моя часть контроллера, где моя сетка привязывается как PurchaseReport.js,

 Ext.define("App.controller.tabs.PurchaseReport", {
extend: "Ext.ux.app.BrowseController",
views: ["tabs.PurchaseReport"],
refs: [
    {
        ref: "myPurchaseReportGrid",
        selector: "PurchaseReportTab > gridpanel"
    }
],

init: function () {
    this.control({
        PurchaseReportTab: {
            bind: function (a, c) {
             **//Grid bind start**
                var b = this.getMyPurchaseReportGrid();
                b.getSelectionModel().deselectAll();
                b.store.removeAll();
                b.fireEvent("bind", b, c)
                **//Grid bind End**

             **//Combobox Bind start**
                var combo = this.getCoachCombo(),
                      store = combo.store,
                      options = store.lastOptions || {};
                options = Ext.apply({
                    callback: function () {
                        combo.select(App.coach.CoachId)
                        //console.log("called rajesh");
                    }
                }, options);
                store.load(options);
                if (App.coach.IsAdmin) {
                    combo.show()
                }
                **//Combobox Bind end**


                var abilities = App.coach.Abilities,
                      toolbar = this.getToolbar();
                for (var x = 0; x < abilities.length; x  ) {

                    var ability = abilities[x],
                        button = toolbar.query("button[tooltip="   ability.Name   "]");
                    if (button.length) {
                        button[0].setVisible(true)
                    }
                }
              store.load(options);
                var purchaseCostField = this.getReferences().purchaseCostField;
                purchaseCostField.setValue(store.sum('PurchaseCost'));
            }
        },

        "PurchaseReportTab > gridpanel": {
            bind: this.bind,
            itemdblclick: this.handleRecord,
            selectionchange: this.selectionChange
        }


    })
}
  

});

Это имя моей детали модели как PurchaseReport.js

  Ext.define("App.model.PurchaseReport", {
extend: "Ext.data.Model",
fields: [
    {
        name: "PurchaseCost",
        type: "date"
    }
],

proxy: {
    type: "ajax",
    url: "ControllerFactory.aspx",
    extraParams: {
        controller: "PurchaseReport",
        operation: "GetPurchaseReportsByCoachIdAndDates"
    },
    reader: {
        type: "json",
        root: "data",
        successProperty: "success"
    }
}
  

});

Страница выглядит следующим образом, и я хочу отобразить общую стоимость покупки в текстовом поле, равную общей стоимости покупки около 1195, как показано на рисунке ниже

введите описание изображения здесь

Ответ №1:

Быстрый способ сделать это

Добавьте ссылку на ваше текстовое поле:

         {
            dataIndex:"PurchaseCost",
            reference: 'purchaseCostField',
            xtype: 'textfield',
            name: 'Total',
            fieldLabel: 'Total',
            allowBlank: false
        }
  

В вашем контроллере после загрузки хранилища добавьте значение в текстовое поле:

 store.load(options);
var purchaseCostField = this.getReferences().purchaseCostField;
purchaseCostField.setValue(store.sum('PurchaseCost'));
  

Комментарии:

1. Он показывает мне ошибку, похожую на следующую ошибку: Сообщение: (ERR_UNKNOWN) «Неперехваченная ошибка типа: this.getReferences не является функцией», когда я добавил код как store.load(options); var purchaseCostField = this.getReferences().purchaseCostField; purchaseCostField.setValue(store.sum(‘PurchaseCost’)); под привязкой: функция (a, c) {}

2. Для получения полного кода вы также можете обратиться к ссылке ниже sencha.com/forum /…

3. Привет, можете ли вы сообщить мне, как мне получить значение?

4. Не могли бы вы сделать скрипку из своего приложения?