- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在找出解决这个问题的最佳方法时遇到了一些麻烦...我应该使用带有加载记录的表单(让我可以轻松访问每个字段的验证),还是应该让绑定(bind)完成所有工作工作的一部分(可以更多地利用 ViewModel)。我无法决定,所以目前,我正在利用两者......我正在设置一个 viewModel 记录并使用相同的记录加载我的表单。我真的不喜欢这种方法,但它可以完成工作。这不是这篇文章的重点……更多的是我这样做的背景。
无论如何,我试图弄清楚如何利用此表单/ View 模型记录来确定 ComboBox 上是否发生了更改。当您编辑表单中的字段时,表单的记录似乎没有更新。我假设这就是原因 updateRecord存在。但是,我不想在每次更改字段后都运行 updateRecord...有没有办法将其设置为“绑定(bind)”或自动更新表单的记录?
这是一个example 。我有一个包含两个项目的网格,一个名称和它们的动物类型。当用户单击编辑图标时,会弹出一个窗口,其中包含一个表单和这两个项目。动物类型是一个组合框,当用户将其更改为人类时,我想显示人类特征字段并隐藏狗特征字段,反之亦然。
我知道我可以监听组合框的选择并更新 View 模型的记录或在其中进行切换,但理想情况下,如果我的 View 模型的记录是从字段的记录更新的,我就不必执行任何操作输入变化。有人对如何做到这一点有任何指导或想法吗?或者也许如何改善流程?
Ext.application({
name: 'Fiddle',
launch: function() {
Ext.define('MyModel', {
extend: 'Ext.data.Model',
fields: [{
name: 'name',
type: 'string'
}, {
name: 'animal',
type: 'string'
}]
});
var store = Ext.create('Ext.data.Store', {
model: 'MyModel',
proxy: {
type: 'memory'
},
data: [{
name: 'Poochie',
animal: 'Dog'
}, {
name: 'Homer',
animal: 'Human'
}]
});
Ext.define('MyEditWindowViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.myeditwindow',
formulas: {
hideHumanField: function(getter) {
var hide = false;
var currentRecord = getter('currentRecord');
console.log(currentRecord.getData());
if (currentRecord.get('animal') === 'Dog') {
hide = true;
}
return hide;
}
},
stores: {
animalStore: {
fields: ['name'],
proxy: {
type: 'memory'
},
data: [{
name: 'Human'
}, {
name: 'Dog'
}]
}
}
});
Ext.define('MyEditWindowViewController', {
extend: 'Ext.app.ViewController',
alias: 'controller.myeditwindow',
init: function() {
var viewModel = this.getViewModel();
this.getViewForm().loadRecord(viewModel.get('currentRecord'));
},
getViewForm: function() {
return this.lookupReference('myForm');
}
});
Ext.define('MyEditWindow', {
extend: 'Ext.window.Window',
controller: 'myeditwindow',
viewModel: {
type: 'myeditwindow'
},
autoShow: true,
height: 400,
width: 400,
modal: true,
title: 'Edit Window',
items: [{
xtype: 'form',
reference: 'myForm',
layout: {
type: 'vbox'
},
items: [{
xtype: 'textfield',
name: 'name',
fieldLabel: 'Name'
}, {
xtype: 'combo',
name: 'animal',
displayField: 'name',
valueField: 'name',
bind: {
store: '{animalStore}'
},
fieldLabel: 'Type'
}, {
xtype: 'textfield',
name: 'humanField',
hidden: true,
bind: {
hidden: '{hideHumanField}'
},
fieldLabel: 'Human Trait'
}, {
xtype: 'displayfield',
name: 'dogField',
hidden: true,
bind: {
hidden: '{!hideHumanField}'
},
fieldLabel: 'Dog Trait',
value: 'Cannot set trait'
}]
}]
});
Ext.create('Ext.grid.Panel', {
store: store,
columns: [{
xtype: 'actioncolumn',
items: [{
icon: 'http://icongal.com/gallery/download/93429/256/png',
tooltip: 'Edit',
handler: function(grid, rowIndex, colIndex) {
Ext.create('MyEditWindow', {
viewModel: {
data: {
currentRecord: grid.getStore().getAt(rowIndex)
}
}
});
}
}]
}, {
text: 'Name',
dataIndex: 'name'
}, {
text: 'Animal Type',
dataIndex: 'animal'
}],
renderTo: Ext.getBody()
});
}
});
我认为我的问题与 this SO question 非常相似,但答案没有帮助,因为仅在首次创建 View 时才检查 phantom 属性...而不是在后续更改后检查。
还发现this thread ,我相信它描述了同样的问题。
最佳答案
编辑:好的,刚刚看到这个问题已经有将近一年了。然而,也许有人会有点“啊哈!”从我的回答:-)
我在我的 fiddle 中稍微改变了你的代码:https://fiddle.sencha.com/#fiddle/19pe
总结:
isHuman
。currentRecord
的绑定(bind),因此无需调用 loadRecord()
方法。hidden
属性绑定(bind)到模型的计算 isHuman
字段。如果您确实需要验证字段值以在表单中显示错误,您还可以使用模型验证。查看文档中的“验证器”部分:http://docs.sencha.com/extjs/5.1/5.1.2-apidocs/#!/api/Ext.data.Model
关于javascript - ExtJS 5 : confusion with persisting changes to view model/form record,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31707607/
我的设置.py: LANGUAGE_CODE = 'de' TIME_ZONE = require_env("TIME_ZONE_IDENTIFIER") USE_I18N = True USE_L1
谁能给我解释一下 Django 的 forms.Form 和 forms.ModelForm 的相同点和不同点? 最佳答案 从 forms.Form 创建的表单由您手动配置。您最好将这些用于不直接与模
我在用 angularjs 构建的表单上遇到此错误。 `错误:[$compile:multidir] 多个指令 [form, form] 请求 'form' Controller :
我是 Spring 的新手,在尝试显示表单错误时遇到了一些麻烦。 我有以下表格: User Name:
我希望在提交表单时找出 spring:bind 和 form:form 标记库之间的区别。 我的 JSP 片段如下: ....
类型‘AbstractControl’上不存在属性‘Controls’。
有一个问题与此非常相似,但我想以不同的方式提出。 我是一个非常自定的人,但有时我确实喜欢走捷径。就这样吧。 我确实发现这两个类非常相似,尽管其中一个“帮助”程序员更快地编写代码或减少代码/重复代码。将
我在控制台中收到此错误。 “表单提交已取消,因为表单未连接” 自从我们将应用程序迁移到更新版本的 React 后,尝试将我的 redux-form 从 v5 迁移到 v6 之后。 我不确定这里出了什么
我想要的是一个表单,在提交时运行验证检查,并突出显示所有无效字段并添加工具提示。 我正在有效地寻找这样的东西: dojo.forEach(dijit.byId('myForm')._invalidWi
我需要设置symfony2表单元素的值。 我在 Controller 操作中使用了doctrine2实体, Symfony\Component\Form\AbstractType 和createFor
这是用于将数据提交到自定义列表的自定义 Editform.aspx。用户完成表单后,他应该能够点击按钮甚至“确定”按钮,并让 sharepoint 将表单数据提交到列表,然后重定向到项目显示表单 (d
我想知道在 spring 标签中编写所有表单是否是一种好习惯,或者我可以将 spring 表单标签与 html 表单标签混合使用吗? 最佳答案 当您需要 Spring 表单提供的功能时使用它们: 绑定
我正在构建动态表单并希望“即时”添加表单组。 这是我的代码,几乎可以工作: import {Component, OnInit} from '@angular/core'; import {FormG
表格 Form.Load 有什么区别? , Form.Shown和 Form.Activated事件?他们被解雇的顺序是什么? 最佳答案 参见 Windows Forms Events Lifecyc
我正在使用具有路线跟踪功能的 Xamarin Forms 开发一些应用程序。尽管我正在使用 AppCenter,即在 App.xaml.cs OnStart 我添加 protected asy
我正在实现一个 gameboy 模拟器,就像我之前的许多人一样。 我正在尝试实现 PPU 并为此使用代表屏幕的类。 // needed because VS can't find it as depe
我是 Orbeon Form 新手,想使用它。不过,我尝试过 Orbeon Form 网站上的 Form 示例,并用泰语输入了一些数据。是的,可以在“泰语”字段中输入数据。但是当我尝试生成“PDF”时
那么让表单一遍又一遍有效地呈现相同表单的最佳方法是什么,并根据实体的属性值有条件地禁用字段? 我有一个发票实体,需要一个用于创建发票的表单,以及在发票流程的各个阶段(生成、发送、支付等)禁用各个字段的
因此,我一直在与我的同事(开发人员和设计人员)就 Web 表单的自动填充工具进行亲切的辩论。这是一个重要的开发问题,因为它会影响表单的构建方式。 问)自动填充工具(例如 Google 工具栏或 Chr
那么让表单一遍又一遍有效地呈现相同表单的最佳方法是什么,并根据实体的属性值有条件地禁用字段? 我有一个发票实体,需要一个用于创建发票的表单,以及在发票流程的各个阶段(生成、发送、支付等)禁用各个字段的
我是一名优秀的程序员,十分优秀!