অ্যাডমিনটিএমএল র নকআউটজেস রেন্ডার করার পরে আমি কীভাবে কোড চালাতে পারি?


11

আপডেট : আপনি সরাসরি ভিউমডেলগুলি অ্যাক্সেস করতে পারেন। যদি রেন্ডারের পরে চালানোর জন্য আপনার কোডটি ট্রিগার করতে হয় তবে মিউটেশনঅবার্সারটি ব্যবহার করুন। আমি আমার কার্যকরী উদাহরণের সাথে সাথে আমার কোড পোস্ট করব।

আসল প্রশ্ন: আমাদের কাছে অনেকগুলি ফোন-ইন অর্ডার রয়েছে। আমি এমন একটি মডিউল নিয়ে কাজ করছি যা অ্যাডমিনে -> গ্রাহক -> একটি ওয়েবপি / জসনপ কল ব্যবহার করে আমাদের সিআরএম সমাধান থেকে নতুন তৈরি করুন auto এইভাবে, ম্যাজেন্টোতে থাকা ডেটাগুলি আমরা ইতিমধ্যে আমাদের 'মাস্টার ডাটাবেসে' সংরক্ষণ করেছি এমন ডেটারের সদৃশ তৈরি করে না।

আমি এখনও একটি কাজ বাকি রেখেছি তা হ'ল গ্রাহকের ঠিকানা (গুলি) যুক্ত করা। এটি প্রথমে সহজ বলে মনে হয়েছিল, যতক্ষণ না আমি বুঝতে পেরেছিলাম যে কীভাবে নকআউটজেস + ম্যাজেন্টোজ গ্রাহক ফর্মের সমস্ত কিছু উপস্থাপন করছে তা আমাকে টেম্প্লেটেড উপাদানগুলি ধরা থেকে বাধা দিচ্ছে। অগ্রবর্তীভাবে সমস্ত ঠিকানা মুছে ফেলার পরে এবং নতুন একটি তৈরি করার পরে আমার ফিল্ডসেটগুলি (ইনপুট উপাদানগুলি) ক্যাপচার করার চেষ্টা করার সময় হ্যাক হচ্ছে।

আপনি যদি ভাবছেন যে আমি কেন এটি করি তবে আমার কোডের একটি অংশ একটি জিনিসকে পপ আপ করে চলে যায় "ওহে, এই ব্যক্তিটি ইতিমধ্যে বিদ্যমান রয়েছে OU আপনি কি তাদের ব্যবহার করতে চান?" এবং এটি আপনি ইতিমধ্যে টাইপ করা যে কোনও কিছু সরিয়ে ফেলে এবং সঠিক তথ্যের সাথে এটি প্রতিস্থাপন করে। তারপরে কল সেন্টারটি যাচাই করে, ইয়াদদা ইয়াদদা।

আমি এখনও অবধি আমার কাছে থাকা কোডটি ভাগ করব, তবে এটি ঠিকভাবে কাজ করছে না। এফওয়াইআই, 'অন-আপডেট' ইভেন্টটি ধরার জন্য এটি বিমূর্তিকে প্রসারিত করে। কোনও সংগ্রহ আইটেমের অভ্যন্তরে সংগ্রহটি অ্যাক্সেস করার চেষ্টা করার জন্য আমাকে রেল করবেন না। আমি অন-আপডেট ইভেন্টটি ধরার জন্য আরও ভাল উপায় নিয়ে আসতে পারি না এবং এখনও সমস্ত ক্ষেত্রটি দেখতে পারি।

আমি কী ভুল তা পুরোপুরি বুঝতে পেরেছি, কীভাবে এটি ঘোরানো যায় তার আমার কোনও ধারণা নেই। যা ভুল তা হ'ল আমি ধরে নিয়েছি।। নিষ্ক্রিয় () কল দ্বারা উত্পাদিত উপাদানগুলি নিম্নলিখিতটিতে অবিলম্বে উপলব্ধ হবে

document.getElementsByClassName ( 'admin__fieldset')

এটি কেবল ভুল যুক্তি। আদর্শভাবে, আমি এই ইউআই কৌশলগুলি অবলম্বন না করেই ফিল্ডসেট সামগ্রীগুলি টানতে সক্ষম হতে চাই, তারপরে একবার আমার সবকিছু সেট আপ হয়ে গেলে, কেবল এটি সরবরাহ করুন।

আমি ডম আপডেটগুলি দেখতে jQuery হ্যাক্স অবলম্বন করতে চাই না।

// jsonService variable is available here because it is in the php template render. see
// Stti/Customer/view/adminhtml/templates/javascriptinject.phtml

define(['ko','jquery','underscore','originalAbstract','uiElement', 'uiCollection'], function(ko, $, _, Abstract, Element, Collection) {
    "use strict";

    var theArray = {
        formFields: [],
        getKnockout: (function (ko) {
            return ko;
        })(ko),
        addressButton: null,
        populateFormFields: function () {
            this.formFields = [];

            // Populate the addressButton thinger
            this.addressButton = this.getNewAddressButton();

            var cb = (function(formFields){
                return function (data) {
                    cr(data, formFields);
                }
            })(this.formFields);

            var cr = function (data, formFields) {
                var elems = data.elems();
                for (var i = elems.length - 1; i >= 0; i--) {
                    if (elems[i].hasOwnProperty('uid')) {
                        formFields.push(elems[i]);
                    }
                }
            };

            var fieldsets = document.getElementsByClassName('admin__fieldset');
            for (var i = fieldsets.length - 1; i >= 0; i--) {
                var data = this.getKnockout.dataFor(fieldsets[i]);
                cb(data);
            }

        },
        cleanupAddresses: function () {
            // Remove all addresses
            var fieldsets = document.getElementsByClassName('admin__fieldset');
            for (var i = fieldsets.length - 1; i >= 0; i--) {
                var data = this.getKnockout.dataFor(fieldsets[i]);
                if (data.dataScope.indexOf('data.address') !== -1 && data.childType === 'group') {
                    data.destroy();
                }
            }
        },
        getNewAddressButton: (function () {
            var retVal = null;
            var customerItem = null;

            // Make sure the template is loaded

            var fieldsets = document.getElementsByClassName('admin__page-nav-item');
            for (var i = fieldsets.length - 1; i >= 0; i--) {
                var data = this.getKnockout.dataFor(fieldsets[i]);
                if (data.dataScope === 'data.address') {
                    data.activate();
                } else {
                    customerItem = data;
                }
            }

            // AT THIS POINT, I REALLY WANT KNOCKOUT TO RENDER.  
            fieldsets = document.getElementsByClassName('admin__fieldset');
            for (var i = fieldsets.length - 1; i >= 0; i--) {
                var data = this.getKnockout.dataFor(fieldsets[i]);
                var elems = data.elems();
                if (elems.length === 1 && data.dataScope === 'data.address' && data.index === 'address') {
                    retVal = elems[0];
                }
            }

            // Return the user to the Account Information section
            if (customerItem !== null) {
                //customerItem.activate();
            }

            return retVal;
        }),
        addNewAddress: function () {
            var retVal = null;

            // Use the addressButton to add a child address
            if (this.addressButton) {
                retVal = this.addressButton.addChild();
            }

            this.populateFormFields();

            return retVal;
        },
        onUpdate: function (newValue) {
            if (newValue) {
                this.clearAllFields();
                switch (this.index) {
                    case "email":
                        this.handleEmailBlur(newValue);
                        break;
                    case "constit_id":
                        this.handleConstitBlur(newValue);
                        break;
                }
            }
        },
        handleEmailBlur: function (newValue) {
            // Don't look up anything if the box was cleared out
            if (newValue != null || newValue != '') {
                this.clearAllFields();
                this.makeJsonReq("GetIndividualByEmail?emailaddress=" + newValue + '&callback=?');
            }
        },
        handleConstitBlur: function (newValue) {
            // Don't look up anything if the box was cleared out
            if (newValue != null || newValue != '') {
                this.clearAllFields();
                this.makeJsonReq("GetIndividualByConstit?constit=" + newValue + '&callback=?');
            }
        },
        jQueryByIndex: function (index) {
            function findUIDbyIndex(element) {
                return element.index === index;
            }

            return $('#' + this.formFields.find(findUIDbyIndex).uid);
        },
        makeJsonReq: function (callString) {
            var msg = null;

            $.getJSON(jsonService + callString, (function (localData) {
                    return function (data) {
                        doWork(data, localData);
                    }
                })(this)
            ).done(function () {
                console.log("Json Request Successful");
            }).fail(function () {
                console.log("Json Request Fail");
            }).always(function () {
                if (msg != "") {
                    alert(msg);
                }
            });


            function doWork(individual, localData) {

                // create as many addresses as the individual has
                if (individual != null) {
                    if (individual.NKIUserId != null) {
                        if (individual.NKIUserId != "") {
                            msg = "WARNING! Netforum reports this user has been added to magento with ID " + individual.NKIUserId + ". LOOKUP THE CUSTOMER FIRST AND CONFIRM YOU WANT TO ADD A NEW CUSTOMER!";
                        }
                        //window.location = "/admin";
                    }

                    if (individual.ConstitID != null) {
                        msg = localData.populateFields(individual, localData);
                    }
                    else {
                        msg = "Individual could not be found in NetForum. Verify that this IS a new customer.";
                    }
                }
                else {
                    msg = "Customer's email was not found in netforum. Be sure to use the correct constituent ID if this is an existing customer. A new Netforum customer will be created if it is blank or incorrect.";
                    // prepFormNoUser("constit");

                }
            }

        },
        populateFields: function (individual, localData) {
            // This function is used to get jquerySelector by index

            var getField = localData.jQueryByIndex;

            if (localData.jQueryByIndex('email')) {
                localData.jQueryByIndex('email').val = individual.PrimaryEmailAddress;
            }

            var addresses = null;
            var mageAddresses = [];

            if (individual.Addresses) {
                addresses = individual.Addresses;

                // Populate the form with the addresses
                for (var i = 0; i < addresses.length; i++) {
                    mageAddresses.push(localData.addNewAddress());
                }
debugger;
                var primaryAddress = null;
                for (var i=0; i < addresses.length; i++) {
                    addresses.each(function (e) {
                        try {
                            if (e.IsPrimary) {
                                primaryAddress = e;
                            }

                        } catch (err) {
                            // todo: handle errors
                        }

                        // Populate the billing address if we are on the order screen
                        if (primaryAddress.Id) {
                            if ($('order-billing_address_cxa_key')) {
                                $('order-billing_address_cxa_key').value = primaryAddress.Id;
                                $('order-billing_address_cxa_key').disable();
                            }
                        }
                        if (primaryAddress.Line1) {
                            if ($('order-billing_address_street0')) {
                                $('order-billing_address_street0').value = primaryAddress.Line1;
                            }
                        }
                        if (primaryAddress.City) {
                            if ($('order-billing_address_city')) {
                                $('order-billing_address_city').value = primaryAddress.City;
                            }
                        }
                        if (primaryAddress.Zip) {
                            if ($('order-billing_address_postcode')) {
                                $('order-billing_address_postcode').value = primaryAddress.Zip;
                            }
                        }
                        if (individual.PrimaryPhoneNumber) {
                            if ($('order-billing_address_telephone')) {
                                $('order-billing_address_telephone').value = individual.PrimaryPhoneNumber;
                            }
                        }

                    });
                }
            }

            if (individual.MemberType != null) {
                if ($('group_id')) {
                    var options = $$('select#group_id option');
                    if (individual.MemberType > 0) {
                        options[3].selected = true;
                        $('signup_method').value = "ADMIN-NEWORDER-EXISTING-MEMBER";
                    }
                    else {
                        options[0].selected = true;
                        $('signup_method').value = "ADMIN-NEWORDER-EXISTING-NONMEMBER";
                    }

                    $('signup_method').disable();

                }

                if ($('_accountconstit_id')) {
                    var options = $$('select#_accountgroup_id option');
                    if (individual.MemberType > 0) {
                        options[3].selected = true;
                        $('_accountsignup_method').value = "ADMIN-NEWCUSTOMER-EXISTING-MEMBER";

                    }
                    else {
                        options[0].selected = true;
                        $('_accountsignup_method').value = "ADMIN-NEWCUSTOMER-EXISTING-NONMEMBER";
                    }

                    $('_accountsignup_method').disable();
                }
            }

            if ($('_accountcst_key')) {
                $('_accountcst_key').value = individual.Id;
                $('_accountcst_key').disable();
            }
            if ($('cst_key')) {
                $('cst_key').value = individual.Id;
                $('cst_key').disable();
            }


            if (individual.FirstName) {
                if ($('_accountfirstname')) {
                    $('_accountfirstname').value = individual.FirstName;
                }
                if ($('order-billing_address_firstname')) {
                    $('order-billing_address_firstname').value = individual.FirstName;
                }
            }
            if (individual.LastName) {
                if ($('_accountlastname')) {
                    $('_accountlastname').value = individual.LastName;
                }
                if ($('order-billing_address_lastname')) {
                    $('order-billing_address_lastname').value = individual.LastName;
                }
            }
            if (individual.MiddleName) {
                if ($('_accountmiddlename')) {
                    $('_accountmiddlename').value = individual.MiddleName;
                }
                if ($('order-billing_address_middlename')) {
                    $('order-billing_address_middlename').value = individual.MiddleName;
                }
            }

            if (individual.DateOfBirth) {
                var dob = new Date(parseInt(individual.DateOfBirth.substr(6)));
                var fDob = dob.toString('MM-dd-yyyy');
                if ($('_accountdob')) {
                    $('_accountdob').value = fDob;
                }
            }

            return msg;
        },
        clearAllFields: function () {
            var inputs = $(':input');
            for (var i = 0; i < inputs.length; i++) {
                inputs[i].value = '';
            }

            this.cleanupAddresses();
            this.populateFormFields();
        }
    };

    // Use jQuery to figure out what page we are on.  the body will contain the class matched by name in the
    // view/adminhtml/layout folder
    if ($('body.customer-index-edit').length > 0) {
        return Abstract.extend(theArray);
    }

});

উত্তর:


3

আপনি Magento কোর দ্বারা সরবরাহিত afterRender কাস্টম বাঁধাই ব্যবহার করতে পারেন ।

এখানে কোর থেকে একটি উদাহরণ । টেমপ্লেটটি যুক্ত করে afterRender="setStickyNode"যা ভিউমোডেলে সেটস্টিকনোড ফাংশনটিকে কল করে ।

এখানে আরও একটি মৌলিক উদাহরণ:

আমার টেম্পলেট:

<div afterRender="doSomething" id="example1">
    <h1>This is a test</h1>
</div>

আমার ভিউমোডেল:

return {
    doSomething: function () {
        // Code that will run after id="example1" element is rendered on the page.
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.