【问题标题】:Can I make a partial template that have readonly fields when used by show and not when used by edit and create?我可以制作一个在 show 使用时具有只读字段而不在 edit 和 create 使用时具有只读字段的部分模板吗?
【发布时间】:2017-03-02 19:01:34
【问题描述】:

我有用于展示、编辑和创建表单的部分模板。 在显示表单中,我不希望它们可编辑,这可能会让用户感到困惑。 有没有一个简单的解决方案,否则我需要一个不同的模板来显示表单或者......为什么要使用模板呢。

我已经绑定了这个并创建了 2 个脚本,一个禁用,一个启用。

脚本 1.

$(document).ready(function(){
$('.elements').attr('readonly',true);
$('.elements').prop('disabled',true);
});

脚本 2.

$(document).ready(function(){
$('.elements').attr('readonly',false);
$('.elements').prop('disabled',false);
});

然后我将这些脚本存储在 assets\javascript 中。 它在展示中运行良好,但编辑和创建也是只读的。

似乎这个目录中的所有内容都会自动用于每个表单,因为即使我从表单中删除了调用,它也可以正常工作。

这里我展示了我最初添加脚本调用的位置:

    <asset:javascript src="myScript_1.js"/>
</body>
</html>

【问题讨论】:

  • 使用 jquery 禁用/启用表单字段。 $('.elements').attr('readonly',true)$('.elements').prop('disabled',true) 为 false 以重新启用设置应该执行此操作的表单元素,使其具有一个名为 class='elements' 的类,以匹配该 jquery 调用,该调用将捕获具有该类的所有表单元素
  • 我在这里也失败了。看看我的修改。

标签: grails partials


【解决方案1】:

我打算将其添加为评论,但随后开始变得冗长且难以理解。

  1. 为什么要将它存储在资产中? 只需将功能块添加到需要它的模板中

_template1.gsp

<script>
$(document).ready(function(){
setReadOnly('${someDefinition}')
function setReadOnly(value) {
  if (value==='READONLY') {
    $('.elements').attr('readonly',true).prop('disabled',true);
  }
}
})
</script>

如果这个函数需要被一堆页面共享,你可以将它添加到 assets/javascript 文件中,而不是在 application.js 中声明它,调用 js 文件 &lt;asset:javascript 标签专门在每个页面上

也许还有一个变量,你传递给模板来说明何时应该调用它

或将其放在 template1 之上作为主模板,并调用需要 js 文件的其他每个模板(这么多选项)

现在在主控制器上做动作

def MyController {

    def view() {
      String mode='READONLY'
      render view: 'index', model:[instance:params,mode:mode]
    }
}

index.gsp 中的

如果 js 存在,那么它将选择模式并为该控制器操作设置只读或将其从一个模板传递到另一个模板,控制器不必定义实际模式,主主视图页面或索引页面可以定义模式太

也许你需要玩/理解然后实施你不能急于这些事情否则你最终会浪费时间和重写

只是为了确保我们在同一页面上。

默认情况下,javascript 文件夹中的 application.js 文件启用了树线 - 默认情况下会读取所有 js 文件。如果您希望在不同的地方手动调用 js,您需要删除此行并声明您使用的每个 js 文件,就像该文件中提供的其他行一样。

这就是在 application.js 中声明之前要付出的代价(不再自动加载 js 文件)

但最重要的是,正如您已经注意到的,这些是全局 js 函数,如果没有 function something() { } 函数调用,那么实际上应该没有什么新东西。

然后他们会在调用实际函数时做出反应,而不是你如何打开它以从任何旧页面调用它,因为它发生在文档打开时不管

【讨论】:

  • 这是很好的信息,恐怕我现在无法对此进行测试,现在要做的事情太多,所以我会在以后的某一天回来。谢谢
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2010-11-26
  • 2012-11-28
  • 2014-06-08
相关资源
最近更新 更多