Показать сообщение отдельно
  #1 (permalink)  
Старый 09.12.2012, 14:22
Новичок на форуме
Отправить личное сообщение для I3ev Посмотреть профиль Найти все сообщения от I3ev
 
Регистрация: 09.12.2012
Сообщений: 1

Замена значения в store страно работает
Здраствуйте.
У меня страная проблема. Код простой и при определеных условиях он работает.
У меня есть окошко с 2 grid'ами. У первого есть текстовое поле куда вводится фамилия для поиска, соответствено, информация загружается после нажатия на кнопку поиска.
Во второй грид информация поступает по 2мому клику по стоке из первого грида, каждому человеку в этом гриде задается роль (председатель или член комиссии).
Есть "кнопка", которая меняет председателя, именно этот код и не работает.
Я это показал в картинках:
1. Добавили 3-х человек с фамилией Иванов, первый добавленый человек стал по умолчаию председателем. Пока все правильно работает

2. Изменили председателя нажав по кнопке. Пока все правильно работает

3. Добавили 2-х человек с фамилией Сидоров. Пока все правильно работает

4. Изменили председателя нажав по кнопке, получилось 2 председателя. Код не правильно работает

5. Изменили еще раз председателя, получилось опять 2 председателя. Код не правильно работа


var store4 = new Ext.data.JsonStore({fields: ["fio","cprof","dept","man_id","m_type"], root: "records"});

var Commision = new Ext.grid.GridPanel({
        store: new Ext.data.Store(
              {proxy: new Ext.data.HttpProxy(new Ext.data.Connection({method: "POST", url: "get_all_people2"})),
               reader: new Ext.data.XmlReader({record: "record",totalRecords: "total"},["fio","cprof","dept","man_id"])}),
        tbar: [{xtype:"textfield",
                 width:300,
                 emptyText:"ФИО",
                 enableKeyEvents:true,
                 minLength:3,
                 listeners: {keydown:
                   function(obj,e){if ((e.getKey() == e.ENTER)&&(this.getValue().length >2))
                                   {Commision.getTopToolbar().items.get(1).fireEvent("click",this,e)}
              }}},
               {xtype: "tbbutton",text:"<span style = \"font-size:12; color:black;\"><b>Поиск</b></span>&nbsp;", listeners:{click: function (){
                 if (Commision.getTopToolbar().items.get(0).getValue().length >2) {Commision.getStore().load({ params: {man_name: encodeURI(Commision.getTopToolbar().items.get(0).getValue())}})}
                  }}}
                      ],
        sm: new Ext.grid.RowSelectionModel(),
        enableColumnMove: false,
        enableHdMenu: false,
        loadMask: true,

        width: 820,
        stripeRows: true,
        cm: new Ext.grid.ColumnModel(
           [{header: "ФИО", width: 250, dataIndex: "fio"},
            {header: "Должность", width: 370, dataIndex: "cprof"},
            {header: "Подразделение", width: 180, dataIndex: "dept"},
            {dataIndex: "man_id", hidden: true}]),
        frame:true,
        height: 250,
         title: "Добавление",
         listeners: {rowdblclick: function(Grid, rowIndex, e) {
         var rec = Commision.getSelectionModel().getSelected();
        var foundItem = store4.find("man_id", rec.data.man_id);
                if (foundItem  == -1) {
                 foundItem = store4.find("m_type", "1")
                 if (foundItem  == -1) { rec.set("m_type","1"); store4.commitChanges(); }}
                  else {rec.set("m_type","0"); store4.commitChanges();};
                    if (AddCommision.getStore().find("man_id", Grid.getSelectionModel().getSelected().data.man_id)  == -1)
                    {AddCommision.getStore().add(Grid.getSelectionModel().getSelected());
                    AddCommision.setTitle("Состав комиссии - " +AddCommision.getStore().getCount())}
                   }},
        view:  new Ext.grid.GridView({autoFill: true})
        });

 function member(value){return (value==1) ? "Председатель" : "Член комиссии"};
 function member_change (v, param, record)
 { if (record.data.m_type!=1) return ''<img src="/ps/images/icons/application_edit.png" width=15 height=15 align=center vspace=0 hspace=0 border=0 style="margin-left:-2px">''
 };

var AddCommision = new Ext.grid.EditorGridPanel({
        store: store4 ,
        sm: new Ext.grid.RowSelectionModel(),
        enableColumnMove: false,
        enableHdMenu: false,
        loadMask: true,
        width: 820,
        stripeRows: true,
        cm: new Ext.grid.ColumnModel({columns:
           [{header: "ФИО", width: 210, dataIndex: "fio", editor: new Ext.form.TextField({allowBlank: false})},
            {header: "Должность", width: 310, dataIndex: "cprof", editor: new Ext.form.TextField({allowBlank: false})},
             {header: "Подразделение", width: 140, dataIndex: "dept", editor: new Ext.form.TextField({allowBlank: false})},
            {header: "Роль",sortable: true, width:110, dataIndex: "m_type",renderer: member},
            {header: "",sortable: false, width:22 ,renderer: member_change},
            {dataIndex: "man_id", hidden: true}],
            isCellEditable: function (col,row) { var record = store4.getAt(row);  if (row!=null && (record.data.man_id>0 || record.data.man_id!=null)) return false; else return true}}),
        frame:true,
        height: 220,
         clicksToEdit: 1,
         title: "Состав комиссии - 0",
         listeners: { celldblclick: function(Grid, rowIndex, columnIndex, e) {if (columnIndex==4)  {
          var foundItem22 = store4.find("m_type", "1");
          store4.getAt(rowIndex).set("m_type","1");
          store4.getAt(foundItem22).set("m_type","0");
          store4.commitChanges();
          }
          else
          { var rec = AddCommision.getSelectionModel().getSelected();
          store4.remove(rec);
          store4.commitChanges();
          AddCommision.setTitle("Состав комиссии - " +store4.getCount());}
          }
          }
        });

 var b_add = new Ext.Button({
    text    : "Добавить",
    handler : function() {
    var Plant = store4.recordType;
    var p = new Plant({
                    fio: "",
                    cprof: "",
                    dept: "",
                    manid: "0",
                    mtype: "0"
                });
                AddCommision.stopEditing();
                store4.insert(0, p);
                AddCommision.startEditing(0, 0);

       }
     });

        var b_add_com = new Ext.Button({
    text    : "<span style = \"font-size:10; color:black;\"><b>Создание коммисии</b></span>&nbsp;",
    handler : function() {
    if(!win1){
            win1 = new Ext.Window({
                title :"Создание коммисии",
                width:830,
                height:530,
                closeAction:"hide",
                items: [Commision, AddCommision],
                 frame: true,
                 layout: "form",
                 listeners: {show: function(){ }},
                 defaults:{margins:"0 0 8 0"},
                 buttons: [{text: "Ok",handler: function(){
                                Full_Commision.setTitle("Состав комиссии - " +AddCommision.getStore().getCount());
                                var find_pred=store4.find("m_type", "1");
                                if (find_pred == -1) alert ("Председатель не выбран");
                                else if (store4.getCount()<4) alert ("В комиссии дожно быть минимум 3 человека");
                                else win1.hide();
                             }}, b_add,
                                      {text: "Закрыть",handler: function(){win1.hide()}}]

                })
                }
        win1.show(this);
                                            }
                                            });
Ответить с цитированием