Javascript 在模型更改时刷新Dojo MVC组不会';不适用于复杂对象
如下所示,我有一个虚拟内存存储,它返回一个复杂对象。我想把这个复杂的对象绑定到表单上。因为它是一个复杂的对象,所以我通过两个MVC组绑定该对象。当模型刷新时(通过“Fetch”按钮),就会出现问题。外部MVC组已刷新,但内部MVC组未刷新。仅当我手动重新设置内部MVC组的Javascript 在模型更改时刷新Dojo MVC组不会';不适用于复杂对象,javascript,dom,dojo,requirejs,Javascript,Dom,Dojo,Requirejs,如下所示,我有一个虚拟内存存储,它返回一个复杂对象。我想把这个复杂的对象绑定到表单上。因为它是一个复杂的对象,所以我通过两个MVC组绑定该对象。当模型刷新时(通过“Fetch”按钮),就会出现问题。外部MVC组已刷新,但内部MVC组未刷新。仅当我手动重新设置内部MVC组的target属性时,它才起作用: dijit.byId('sub-group').set('target', model.prop7); 还有其他更好的方法吗 <script type="text/javascript"
target
属性时,它才起作用:
dijit.byId('sub-group').set('target', model.prop7);
还有其他更好的方法吗
<script type="text/javascript">
// Create dummy store
var store;
require(['dojo/store/Memory'], function(Memory) {
store = new Memory({
data: [{
id: 1,
prop1: 'prop 1 value',
prop2: 'WA',
prop7: {
prop8: 'prop 4 value',
prop9: 'prop 5 value'
}
}]
});
});
// Create model for MVC
var model;
require([
'dojo/dom',
"dojo/parser",
"dojo/Stateful",
"dojo/domReady!"
], function (dom, parser, Stateful) {
model = new Stateful();
});
</script>
<button data-dojo-type="dijit/form/Button" data-dojo-props="iconClass: 'dijitIconDatabase'">
<script type="dojo/on" data-dojo-event="click">
var data = store.get(1);
model.set(data);
//dijit.byId('sub-group').set('target', model.prop7);
</script>
Fetch
</button>
<form data-dojo-type="dijit/form/Form" id="form" data-dojo-type="dojox/mvc/Group" data-dojo-props="target: model">
<script type="dojo/require">at: "dojox/mvc/at"</script>
<div class="row">
<label for="text">Text:</label>
<input id="text" data-dojo-type="dijit/form/ValidationTextBox" required="true" data-dojo-props="value: at('rel:', 'prop1')"/>
</div>
<div class="row" id="sub-group" data-dojo-type="dojox/mvc/Group" data-dojo-props="target: model.prop7">
<label for="text2">Text 2:</label>
<input id="text2" data-dojo-type="dijit/form/ValidationTextBox" required="true" data-dojo-props="value: at('rel:', 'prop8')"/>
</div>
</form>
//创建虚拟存储
var存储;
require(['dojo/store/Memory'],函数(内存){
存储=新内存({
数据:[{
id:1,
prop1:“prop1值”,
提案2:‘哇’,
提案7:{
prop8:‘Prop4值’,
第9条:“第5条价值”
}
}]
});
});
//为MVC创建模型
var模型;
要求([
“dojo/dom”,
“dojo/parser”,
“dojo/Stateful”,
“dojo/domReady!”
],函数(dom,解析器,有状态){
model=newstateful();
});
var data=store.get(1);
模型集(数据);
//dijit.byId('sub-group').set('target',model.prop7);
取来
at:“dojox/mvc/at”
正文:
案文2:
我可以说:
- 通常,您需要使用来使小部件对模型中的更改做出反应。这也不例外
- Dojo不允许您放置二对一元素。你可能想考虑一下。
- 要创建嵌套对象的数据模型,需要使用。已由1.8版取代,并于1.8版起生效
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.10.1/dojo/resources/dojo.css" />
<link id="themeStyles" rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.10.1/dijit/themes/claro/claro.css" />
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.10.1/dojo/dojo.js" data-dojo-config="parseOnLoad: 0, async: 1"></script>
<script type="text/javascript">
require([
"dojo/parser",
"dojo/store/Memory",
"dojox/mvc/getStateful"
], function(parser, Memory, getStateful){
model = getStateful({});
store = new Memory({
data: [{
id: "mydata",
prop1stLevel: "Value of 1st level property",
group2ndLevel: {
prop2ndLevel: "Value of 2nd level property"
}
}]
});
parser.parse();
});
</script>
</head>
<body class="claro">
<script type="dojo/require">at: "dojox/mvc/at"</script>
<button data-dojo-type="dijit/form/Button" data-dojo-props="iconClass: 'dijitIconDatabase'">
<script type="dojo/on" data-dojo-event="click">
require(["dojox/mvc/getStateful"], function(getStateful){
model.set("group1stLevel", getStateful(store.get("mydata")));
});
</script>
Fetch
</button>
<form id="form" data-dojo-type="dijit/form/Form" data-dojo-mixins="dojox/mvc/Group" data-dojo-props="target: at(model, 'group1stLevel')">
<div class="row">
<label for="1st-level">1st level:</label>
<input id="1st-level" data-dojo-type="dijit/form/ValidationTextBox" required="true" data-dojo-props="value: at('rel:', 'prop1stLevel')"/>
</div>
<div class="row" id="sub-group" data-dojo-type="dojox/mvc/Group" data-dojo-props="target: at('rel:', 'group2ndLevel')">
<label for="2nd-level">2nd level:</label>
<input id="2nd-level" data-dojo-type="dijit/form/ValidationTextBox" required="true" data-dojo-props="value: at('rel:', 'prop2ndLevel')"/>
</div>
</form>
</body>
</html>
要求([
“dojo/parser”,
“dojo/store/Memory”,
“dojox/mvc/getStateful”
],函数(解析器、内存、getStateful){
model=getStateful({});
存储=新内存({
数据:[{
id:“我的数据”,
prop1stLevel:“一级属性值”,
第2组级别:{
prop2ndLevel:“二级属性值”
}
}]
});
parser.parse();
});
at:“dojox/mvc/at”
require([“dojox/mvc/getStateful”],函数(getStateful){
model.set(“group1stLevel”,getStateful(store.get(“mydata”));
});
取来
第一级:
第二级:
希望这有帮助
最好,-Akira您是否尝试使用
dojox.mvc.StatefulModel
?谢谢,但我没有使用它,因为它已被弃用。