我正在开发jQuery和RactiveJS模板中的独立小部件。最初使用动态输入表单元素打开小部件,并使用AJAX调用填充这些元素。这里的电子邮件是一个静态字段。这是用户的初始视图。当用户单击窗口小部件中的按钮时,它将验证表单并发送带有验证数据的另一个AJAX-POST调用,并在窗口小部件模板本身内的div
上显示请求的响应。如果POST调用失败,则应在同一div
中显示一些错误消息。我已经成功实现了小部件和验证的初始视图。以下是我的代码:
模板
<div> <!-- all the mustache {{}} variables are coming from the loadData() ajax call -->
{{#partial widget-header}}
<header>
<div >
<a href="#"><img alt="logo"><span>{{clientID}}</span></a>
</div>
</header>
{{/partial}} {{>widget-header}}
<section>
<div>
<div>
<form>
<span>Complete required fields </span> {{#partial mandatory}}
<em>*</em> {{/partial}}
{{#each items}}
<div>
<div>
<label>{{dynamicField}}</label>{{>mandatory}}</div>
<div>
<input type="text" name="{{dynamicField}}" maxlength="20">
<div>{{dynamicFieldHelp}}</div>
</div>
</div>
{{/each}}
<div >
<div>
<label>Your Email Id</label>{{>mandatory}}
</div>
<div >
<input type="text" name="email">
<div>enter your email</div>
</div>
</div>
<div >
<input type="button" value="Submit Form" on-click="formValidate">
</div>
</form>
</div>
</div>
</section>
</div>
的JavaScript
this.ractive = new Ractive({
el: 'widgetContent',
template: mainTemplate,
data: function loadData() {
$.ajax({
async: false,
url: "https://example.com/xyz/" +employeeNo,
success: function (response) {
initialData = response.payload[0];
}
});
return initialData; // return the dynamic form elements in data field.
},
oncomplete: function () {
self.center();
}
});
this.ractive.on({
formValidate: function (ev) {
validate the form and send AJAX-POST call then display the response data in a div -
this is where I am stuck..
},
});
但是我在第二次AJAX-POST调用中面临的问题。我无法在ractive初始化中使用第二个data
字段。我该如何实现这部分?如果我在ractive中使用第二个data
字段,它将不会调用第一个显示表单元素的AJAX调用。所以我的理解就像只能在ractive初始化中添加一个数据字段。
我是否需要使用任何高级ractive概念(如组件)来实现此部分?有人可以帮我这个。
注意: - 我没有在模板中添加div
s进行结果处理,因为我被卡住了
答案 0 :(得分:3)
您不需要两个data
成员;你想要的是你的data
包含一个单独的响应数据字段。根据您所拥有的内容,data
最初应该是:
{
items: [],
response: 0
}
我会添加一个oninit
函数来执行初始的AJAX调用,然后当你收到响应时,请ractive.set("items", items)
进行设置。使用set
会使Ractive自动使用新项目更新视图。
接下来,在您的formValidate
函数中,进行AJAX调用。当响应返回时,再次使用set
通知Ractive更改:ractive.set("response", response)
。将div添加到模板中:
{{#response}}
<div>{{response}}</div>
{{/}}