我有一个带有许多空字段的搜索表单。用户在字段中输入值并点击“Enter”后,我从值(使用$.param()
)创建一个查询字符串并将其发送到服务器。一切都很好,直到您清空一个字段并再次点击“Enter”。因为该字段之前有一个值,该属性已经被设置,所以现在在点击提交时,该属性仍然被添加到查询字符串中,只是没有附加值。
一个例子和一些代码:
Search.CustomerCard = Marionette.ItemView.extend({
template: "#customer-search-card",
tagName: "section",
className: "module primary-module is-editing",
initialize: function () {
this.model.on('change', function(m, v, options) {
console.log("Changed?", m.changedAttributes();
});
},
events: {
"click .js-save": "searchCustomers",
"keypress [contenteditable]": "searchCustomersOnEnter"
},
bindings: {
…
},
onRender: function () {
this.stickit();
},
searchCustomersOnEnter: function (e) {
if (e.keyCode !== 13) { return; }
e.preventDefault();
this.searchCustomers(e);
},
searchCustomers: function (e) {
e.preventDefault();
$(e.target).blur();
var query = $.param(this.model.attributes);
this.trigger("customers:search", query);
}
});
您将在这一var query = $.param(this.model.attributes);
行中看到我将模型的属性转换为查询字符串以发送到我的 API。您可能还会看到我正在使用backbone.stickit。如何在创建查询字符串之前无缝取消设置任何为空的属性?