下面是在使用wijmo+javascriptmvc中遇到的一些问题:
1、Ajax请求中,后台响应消息的格式必须与dataType一致,否则,在控制器中监听不到Model的一些默认事件(例如:created,updated,destroyed).
例子:
如果我们定义了一个Ajax请求,其dataType=json,
$.Model('Model',{
create:function(attrs,success,error){
return $.ajax(
type:'POST',
url:'/test' ,
dataType:'json',
success:success,
error:error
);
}
},{});
如果/test响应回来的消息格式不是json格式,那么
$.Controller('Controller',{
'{Model} created' : function(result){
//不会触发这个事件
}
},{});
2、如果对一个Model实例,多次使用POST请求,请在每次发送之前把Model的attrs清空,否则,下一次的POST请求会把上一次的attrs带上。
3、Ajax发送数据格式为Json时,需要3个步骤:首先,设置Ajax的ContentType为application/json,然后,把attrs格式化为Json对象,如$.toJson(attrs),最后,引入jquery/lang/json包。
4、在wijmo控件使用过程中,然后给一些控件添加自己的事件,不要在控制器的静态属性里添加,要在wijmo控件生成完后,再添加自己的事件。
例如:我们然后给accordion添加自己的点击事件,
$.Controller('Controller',{
init:function(){
$("#accordion").wijaccordion({
header: "h3"
});
//应该在这里添加
$('#selector').click(function(){
//自己的动作,会触发
});
},
//不应该这样添加
'#selector click':function(){
//自己需要处理的动作,不会触发
}
}
5、如果在视图中再执行其它视图,需要在它的前面加两个等号“==”。我们在这里使用ejs视图做例子。
例如:<%==$.View("/test/init");%>
6、如果一个控件器可能绑定到不同的元素,请注意控件器中定义的一些事件的冒泡,所以,我们不管是否在多个元素中绑定,都需要在事件使用之前停止它的冒泡,方法:停止事件或者return false;
7、由于控件器中init只执行一次,所以,建议我们开发人员在开发时,使用事件来加载视图,这样我们可以刷新同一视图,并且可以在一个控件器实现多个视图。
例如:
$.Controller('Controller',{
defaults:{
listensTo:['list','add']
},
init:function(){
},
'list':function(el,ev){
//加载列表视图
},
'add':function(el,ev){
//加载创建视图
}
},{});
8、在控件器已绑定到特定元素后,如果其它控件器想绑定到它的上面,请清空其它控件器的绑定。
$("selector").controller().destroy();
$("selector").remove();
$("selector").html("");
9、为元素绑定事件或者CSS样式时,请使用精确的选择器,而不要用笼统的选择器。
例如:
<button id="test">按钮</button>
为控件绑定点击事件:
使用$("#test").click();
而不使用$("button").click();
10、自定义项目所需要几种风格的模板,然后利用scaffold生成代码,减少开发量。
我们直接修改jquery/generate里面的模板即可。
11、注意在使用Model时,需要给它Id,否则,它一些默认的事件不会触发。
因为Model是否存在是通过Id来判断的,而且是指定id这个属性,其它的都不行。
我们在实际应用中可能模板就没有id这个属性,所以,我们需要给它id。
例如:Model修改属性,执行save方法时,需要执行update方法,那么Model必须存在id,否则,会触发
create,删除也一样,需要给它id,否则,在Model拿不到所需要的id参数。
12、JavascriptMVC3.3版本中,*.ejs文件中包含HTML文本或者数据表达式,不能2者混到同个ejs中,否则Build打包里,出现不能打包的情况。