2012-05-30 23 views
2
正常工作

我在煎茶新,所以bascially我在验证 让问题在这里是我的代码验证是不是在煎茶

Ext.define("PlayListApp.view.PlayEditor", { 
    extend: "Ext.form.Panel", 
    requires: "Ext.form.FieldSet", 
    alias: "widget.playeditorview", 
    config:{ 
     scrollable: 'vertical', 
     items: [ 
      { 
       xtype: "toolbar", 
       docked: "top", 
       title: "Edit PlayList", 
       items: [ 
        { 
         xtype: "button", 
         ui: "action", 
         iconCls:"home", 
         iconMask:true, 
         itemId: "backButton" 
        }, 
        { xtype: "spacer" }, 
        { 
         xtype: "button", 
         ui: "action", 
         iconCls:"compose", 
         iconMask:true, 
         itemId: "saveButton" 
        } 
       ] 
      }, 
      { 
       xtype: "toolbar", 
       docked: "bottom", 
       items: [ 
        { 
         xtype: "button", 
         iconCls: "trash", 
         iconMask: true, 
         itemId: "deleteButton" 
        } 
       ] 
      }, 
      { xtype: "fieldset", 
       items: [ 
        { 
         xtype: 'textfield', 
         name: 'title', 
         label: 'Link', 
         placeHolder: 'http://yousite.com', 
         required: true, 

        }, 
        { 
         xtype: 'numberfield', 
         name: 'narrative', 
         label: 'Duration', 
         placeHolder:'99', 
         required:true 
        } 
       ] 


      } 
     ], 
listeners: [ 
      { 
       delegate: "#backButton", 
       event: "tap", 
       fn: "onBackButtonTap" 
      }, 
      { 
       delegate: "#saveButton", 
       event: "tap", 
       fn: "onSaveButtonTap" 
      }, 
      { 
       delegate: "#deleteButton", 
       event: "tap", 
       fn: "onDeleteButtonTap" 
      }, 


     ] 
    }, 

    onSaveButtonTap: function() { 
     //console.log("saveNoteCommand"); 
     this.fireEvent("saveNoteCommand", this); 
    }, 
    onDeleteButtonTap: function() { 
     //console.log("deleteNoteCommand"); 
     this.fireEvent("deleteNoteCommand", this); 
    }, 
    onBackButtonTap: function() { 
     //console.log("backToHomeCommand"); 
     this.fireEvent("backToHomeCommand", this); 
    } 

}); 

我想验证这两个标题和叙述,但问题是,只有标题当我点击保存按钮时没有为叙述分配任何值然后在没有检查叙述的验证条件的情况下保存按钮正常工作。

Ext.define("PlayListApp.model.Play", { 
    extend: "Ext.data.Model", 
    config: { 
     idProperty: 'id', 
     fields: [ 
      { name: 'title', type: 'string' }, 
      { name: 'narrative', type: 'int'} 
     ], 
     validations: [ 
      { type: 'presence', field: 'title', message: 'Please enter a link in playlist.' },//This validation only works 
      { type: 'presence', field: 'narrative', message: 'Please enter duration in playlist'}, 
      { type: 'length', field:'narrative', min:'1', max:'3', message:'Please enter digit between 1 and 3'} 
     ] 
    } 
}); 

这里下面我检查每个字段

 
Ext.define("PlayListApp.controller.Plays", { 

    extend: "Ext.app.Controller", 
    config: { 
     refs: { 
      // We're going to lookup our views by xtype. 
      notesListView: "playslistview", 
      noteEditorView: "playeditorview", 
      notesList: "#notesList" 
     }, 
     control: { 
      notesListView: { 
       // The commands fired by the notes list container. 
       newNoteCommand: "onNewNoteCommand", 
       editNoteCommand: "onEditNoteCommand" 
      }, 
      noteEditorView: { 
     // The commands fired by the note editor. 
       saveNoteCommand: "onSaveNoteCommand", 
       deleteNoteCommand: "onDeleteNoteCommand", 
       backToHomeCommand: "onBackToHomeCommand" 
     } 
     } 
    }, 

    onSaveNoteCommand: function() { 

     //console.log("onSaveNoteCommand"); 

     var noteEditor = this.getNoteEditorView(); 

     var currentNote = noteEditor.getRecord(); 
     var newValues = noteEditor.getValues(); 

     // Update the current note's fields with form values. 
     currentNote.set("title", newValues.title); 
     currentNote.set("narrative", newValues.narrative); 

     var errors = currentNote.validate(); 
     msg=''; 
     if (!errors.isValid()) { 
      //Ext.Msg.alert('Wait!','Please fill all the fields',Ext.emptyFn); 
      //Ext.Msg.alert('Wait!', errors.getByField("title")[0].getMessage(), Ext.emptyFn); 
      errors.each(function (err) { 
              msg += err.getMessage() + '
'; }); // each() Ext.Msg.alert('ERROR!', msg); currentNote.reject(); return; } var notesStore = Ext.getStore("Notes"); //notesStore.sync(); //notesStore.sort([{ property: 'dateCreated', direction: 'DESC'}]); this.activateNotesList(); },
+0

我把这个在SenchaFiddle(重命名你的控制器)。稍后将尝试看看:http://www.senchafiddle.com/#KIo66 – 2012-05-30 22:26:07

+0

@ M-x谢谢队友! – Arpit

+0

@ M-x所以你找到了解决办法? – Arpit

回答

0

在PlayController的验证,onSaveNoteCommand被调用,但我得到一个空值currentNote,这是造成应用程序死亡。

 
    var currentNote = noteEditor.getRecord(); // Always returns null !? 

我给Sencha Fiddle加了个警报。 noteEditor有一个值。

+0

代替那个我应该增加什么来获得一些价值? – Arpit

+0

其实我从if(!errors.isValid())得到一个错误(如果我使用数字字段,如果代替,如果我使用textfield然后显示所有错误意味着数字字段的错误,如果我使用文本字段,然后匹配器没有如果我在type =“format”中使用以显示错误类型 – Arpit

+0

我没有validate()函数,最大和最小支持最小支持。我只有部分项目? – 2012-05-31 14:23:22

1

我已经对您的问题做了一些工作,但在“PlayListApp.controller.Plays”中添加了自定义验证。 现在“叙述”字段的长度不会超过3位数。 用户也不能输入负数。

你必须要在两个文件中的变化: -

1) “PlayListApp.model.Play”
2) “PlayListApp.controller.Plays”

// "PlayListApp.model.Play" 

    Ext.define("PlayListApp.model.Play", { 
extend: "Ext.data.Model", 
config: { 
    idProperty: 'id', 
    fields: [ 
     { name: 'title', type: 'string' }, 
     { name: 'narrative', type: 'int'} 
    ], 
    validations: [ 
     { type: 'presence', field: 'title', message: 'Please enter a link in playlist.' },//This validation only works 
     { type: 'presence', field: 'narrative', message: 'Please enter duration in playlist'}, 
     { type: 'presence', field: 'narrative', message: 'Enter a number for this note.' } 
    ] 
} 
}); 

这里是控制器。 js - “PlayListApp.controller.Plays”

Ext.define("PlayListApp.controller.Plays", { 

extend: "Ext.app.Controller", 
config: { 
    refs: { 
     // We're going to lookup our views by xtype. 
     notesListView: "playslistview", 
     noteEditorView: "playeditorview", 
     notesList: "#notesList" 
    }, 
    control: { 
     notesListView: { 
      // The commands fired by the notes list container. 
      newNoteCommand: "onNewNoteCommand", 
      editNoteCommand: "onEditNoteCommand" 
     }, 
     noteEditorView: { 
    // The commands fired by the note editor. 
      saveNoteCommand: "onSaveNoteCommand", 
      deleteNoteCommand: "onDeleteNoteCommand", 
      backToHomeCommand: "onBackToHomeCommand" 
    } 
    } 
}, 

onSaveNoteCommand: function() { 

    //console.log("onSaveNoteCommand"); 

    var noteEditor = this.getNoteEditorView(); 

    var currentNote = noteEditor.getRecord(); 
    var newValues = noteEditor.getValues(); 

    currentNote.set("title",newValues.title); 
    currentNote.set("narrative", newValues.narrative); 
    var errors = currentNote.validate(); 

    if (!errors.isValid()) { 
     //Ext.Msg.alert('', errors.getByField("title")[0].getMessage(), Ext.emptyFn); 
     errors.each(function (err) { 
             msg += err.getMessage() + '<br>'; 
            }); // each() 
            Ext.Msg.alert('ERROR!', msg); 
     currentNote.reject(); 
     return; 
    } 

     // checking for negative number 
    if(newValues.narrative<="0") 
    { 
     Ext.Msg.alert('','Choose number greater than 0'); 
     currentNote.reject(); 
     return; 
    } 
     // checking for value greater than 3-digit number 
    if(newValues.narrative>"999") 
    { 
     Ext.Msg.alert('','Length should not be greater than THREE'); 
     currentNote.reject(); 
     return; 
    } 


    var notesStore = Ext.getStore("Notes"); 

    //notesStore.sync(); 

    //notesStore.sort([{ property: 'dateCreated', direction: 'DESC'}]); 

    this.activateNotesList(); 
}, 

希望这对你有所帮助。
如果这不是您想要的,请再次解释您的要求。
再见。