我可以制作一个部分模板,当show使用时,该部分模板具有只读字段,而不是编辑和创建时使用的模板吗?

时间:2017-03-02 19:01:34

标签: grails partials

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

我已将此绑定并创建了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>

1 个答案:

答案 0 :(得分:0)

我打算将其添加为评论,但随后开始变得越来越复杂。

  1. 为什么要将它存储在资产中? 只需将功能块添加到需要它的模板
  2. _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文件<asset:javascript标记< / p>

    并且可能是一个传递给模板的变量,以说明何时应该调用它

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

    现在在主控制器上执行操作

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

    in index.gsp

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

    也许你需要玩/理解然后实施你不能匆忙这些东西,否则你最终会浪费时间和重写

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

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

    所以这是支付的价格(不再自动加载js文件),直到在application.js中声明

    但最重要的是,你已经注意到这些是全局js函数,实际上没有什么新东西可以进行function something() { }函数调用。

    他们会在调用实际函数时做出反应,而不是你如何使用它来打开任何旧页面的调用,因为它是在文档打开时发生的,无论