在使用kineticjs添加新图层后,我无法在图层上编辑文本

时间:2014-11-11 09:51:32

标签: javascript jquery kineticjs

我已经制作了这个http://jsfiddle.net/62Wjc/5/,在图层上创建和更改文字,但它是静态的。现在我为动态添加字段制作脚本+添加图层+更改图层。

在我的脚本上有三个功能,分别是:

  1. 创建元素的函数CreateTxt和使用KineticJS创建图层。
  2. 删除元素
  3. 的函数fRField
  4. 功能ChangeTxt用于图层上的更改文字。
  5. 这是我的剧本:

    $(document).ready(function() {
    
        var nwValue = [];
        var nwLayer = {};
        var nwTxt = {};
        var tulisan = 'Your text here';
        var con = $('#idEditor');
        var cW = con.width();
        var cH = con.height();
        var stage = new Kinetic.Stage({
            container: 'idEditor',
            width: cW,
            height: cH
        });
    
        $('a[data-selector="get_new_txt"], a[data-selector="get_new_img"]').on('click', function(event){
            var time = new Date().getTime();
            var regexp = new RegExp($(this).data('id'), 'g');
            $('#nF').append($(this).data('fields').replace(regexp, time));
            CreateTxt(time);
            event.preventDefault();
        });
    
        $('#nF').on('click', 'a[data-selector="removeField"]', function(e) {
            var a = $(this);
            fRField(a);
            e.preventDefault();
        });
    
        $('#nF').on('keyup', 'input[data-selector="inputName"]', function() {
            var a = $(this);
            ChangeTxt(a);
        });
    
        function CreateTxt(idV) {
            var iclone = 0;
            nwValue.push(idV);
            $.each(nwValue, function( index, value ){
              nwLayer["layer"+ value] = new Kinetic.Layer();
            });
    
            stage.add(nwLayer["layer"+ idV]);
            $.each(nwValue, function( index, value ){
              nwTxt["text"+ value] = new Kinetic.Text({
                    x: 100,
                    y: 100,
                    text: "Your text here",
                    fontSize:18,
                    fill: 'red',
                    draggable: true,
                    id: 'txt'+ value
                });
            });
            nwLayer["layer"+ idV].add(nwTxt["text"+ idV]);
            nwLayer["layer"+ idV].draw();      
        }
    
        function fRField(a){
          if(confirm('Are you sure to delete this field ?')) {
            a.prev("input[type=hidden]").value = "1";
            a.closest(".form-inline").remove();
          }
          return false;
        }
    
        function ChangeTxt(a){
            var dataid = a.attr('data-id');
            var newValue = a.val();
            nwTxt["text"+ dataid].setText(newValue);
            nwLayer["layer"+ dataid].draw();
        }
    
    });
    

    jsfiddle:http://jsfiddle.net/8oLsoo25/5/

    添加新文本后,我无法先在图层上更改文字。

1 个答案:

答案 0 :(得分:1)

$.each nwValue nwValue = [];号召唤你的行为正在毁了你。如果您将nwValue.push(idV);放在CreateTxt {{1}}之上,那么一切都会按预期进行。换句话说,您将替换对原始对象的引用。另外,你知道动态中的新图层意味着DOM中的新画布元素吗?