Ember:在页面加载时锁定表单而不进行硬编码"禁用"

时间:2016-04-19 16:11:04

标签: javascript ember.js

我有几种形式有几个输入。我的老板让我找到一种方法来禁用表格并有一个锁定/解锁按钮。因此,用户将转到表单,单击解锁进行更改,然后锁定和/或保存表单。主要问题是试图找出如何在没有硬编码的情况下做到这一点" disabled = true"进入所有输入(可能是几百个)。

我90%的方式。我有toggleLock动作工作,我甚至拥有它,所以即使你在同一路径中转换到不同的模型,表单也会锁定。问题是表单第一次加载页面或刷新页面时表格没有锁定。

这里是代码: 可从以下位置获取:https://github.com/djbreen7/ember-sandbox

应用/模板/餐/ view.hbs

class FixedButton : Button {
    public string FixedText;
    public Point TextOffset;
    /*public PointF FixedTextLocation {
        get{return new PointF( (float)(Location.X+TextOffset.X), (float)(Location.Y+TextOffset.Y) );}
    }*/

    protected override void OnPaint(PaintEventArgs e){
        base.OnPaint(e);

        if(String.IsNullOrEmpty(Text) && !String.IsNullOrEmpty(FixedText) ){
            e.Graphics.DrawString(FixedText, Font, new SolidBrush(ForeColor), TextOffset);
        }
    }
}

应用/路由/餐/ view.js

<form class="edit-form">
  <div class="form-group">
    <label for="exampleInputEmail1">Meal Name</label>
    {{input type="text" class="form-control" id="" placeholder="" value=model.name}}
  </div>
  ...
  <button id="toggle-lock" type="button" class="btn btn-default" {{action 'toggleLock'}}>Unlock</button>
</form>

2 个答案:

答案 0 :(得分:0)

  

块引用

您可以更轻松地解决这个问题,这些是您可以遵循的步骤:

  1. 如果您希望表单开始锁定,则必须设置if(something){ rlayout.setBackground(getResource().getDrawable().R.drawable.img); } or use switch
  2. 删除isLocked:true功能
  3. lockForm属性添加到您的输入中。这将根据`isLocked。

  4. 启用或禁用您的输入
  5. disable

  6. {{input type="text" class="form-control" id="" placeholder="" value=model.name disabled=isLocked}}controller.send('toggleLock');函数中删除model,因为您将beforeModel设置为true

  7. 是不必要的
  8. 添加isLocked挂钩以处理同一路径中的转换

    resetController
  9. 这是一个正在运行的示例https://ember-twiddle.com/fd75547e27faf867ce0daeb9eb65db14?openFiles=controllers.application.js%2C

答案 1 :(得分:0)

你可以使用jQuery的强大功能。使用jQuery,您可以在一行中禁用页面(或页面的一部分)中的所有输入字段:

$("input").prop("disabled", true);

如果你有textareas,你也必须为它们添加一行:

$("textarea").prop("disabled", true);

如果某些字段每次都会被禁用,该怎么办:

如果您有一些已经禁用的输入,则应将其原始值存储为属性(在将每个输入的状态设置为禁用之前):

$('input:disabled').attr('prev_disabled',true);

这样你就可以在切换两次后恢复它们(在将每个输入的状态设置为启用之后):

$('input[prev_disabled]').prop('disabled',true);

如何在jmber.js中使用jQuery:

您可以在您的操作,组件生命周期,Ember运行循环等中使用它。(Web上有大量示例,例如this blog

操作中的示例用法:

actions: {
    lockRequested: function() {
        this.$('input:disabled').attr('prev_disabled',true);
        this.$("input").prop("disabled", true);
    },
    unlockRequested: function() {
        this.$("input").prop("disabled", false);
        this.$('input[prev_disabled]').prop('disabled',true);
    }
}

如果您想在进入页面后锁定输入,请使用组件生命周期(例如didRenderdidInsertElement或ember run loop)