কাস্টম পদ্ধতি ডেটা মডেল তৈরি করুন

পদ্ধতিটি সমস্ত রেফারেন্স ব্যাকিং ডেটা মডেলকে ব্লক করে যা পদ্ধতির স্বাক্ষর (নাম, পরামিতি এবং রিটার্ন) সংজ্ঞায়িত করে। @blockly/block-shareable-procedures প্লাগইন দ্বারা প্রদত্ত ডেটা মডেলগুলি Blockly-এর লিগ্যাসি বিল্ট-ইন পদ্ধতি ব্লকের আচরণের প্রতিলিপি করার জন্য তৈরি করা হয়েছে।

এর মধ্যে এমন কিছু আচরণ রয়েছে যা আপনি আপনার কাস্টম পদ্ধতি ব্লকের জন্য নাও চাইতে পারেন, যার মধ্যে রয়েছে:

  • রিটার্ন প্রকার সমর্থিত নয়
  • সমস্ত পরামিতি একটি গ্লোবাল ভেরিয়েবলের সাথে যুক্ত

আপনি যদি ভিন্ন আচরণ চান, আপনি আপনার নিজস্ব কাস্টম পদ্ধতি ডেটা মডেল তৈরি করতে পারেন।

পদ্ধতি মডেল বাস্তবায়ন

আপনার পদ্ধতির ডেটা মডেলকে IprocedureModel ইন্টারফেস বাস্তবায়ন করতে হবে।

class MyProcedureModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;

    // Note: construction should not add the model to the procedure map.
  },

  // Other methods are omitted for brevity...
}

প্যারামিটার মডেল বাস্তবায়ন

আপনার প্যারামিটার ডেটা মডেলকে IParameterModel ইন্টারফেস বাস্তবায়ন করতে হবে।

class MyParameterModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;
  },

  setProcedureModel(model) {
    this.model =  model;
    return this;
  }

  // Other methods are omitted for brevity...
}

ট্রিগার পরিবর্তন

পদ্ধতির মডেলে পরিবর্তন আনতে পারে এমন যে কোনো পদ্ধতিতে @blockly/block-shareable-procedures প্লাগইন থেকে triggerProceduresUpdate কল করা উচিত। এটি যেকোনো পদ্ধতির ব্লকে doProcedureUpdate কল করবে, যার ফলে সেগুলি পুনরায় রেন্ডার হবে।

import {triggerProceduresUpdate} from '@blockly/block-shareable-procedures';

class MyProcedureModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

ঘটনা

@blockly/block-shareable-procedures প্লাগইন-এর পদ্ধতির মডেলগুলিও যখন পদ্ধতিগুলি পরিবর্তন করা হয় তখন ইভেন্টগুলি চালু করে। এটি একাধিক ওয়ার্কস্পেসকে সিঙ্কে রাখার অনুমতি দেয়, এবং পদ্ধতির মডেলগুলি তাদের জুড়ে ভাগ করা যায়। আপনি চাইলে ইভেন্ট ফায়ার করতেও বেছে নিতে পারেন।

ডিসিরিয়ালাইজেশন

ডিসিরিয়ালাইজেশন সমর্থন করার জন্য আপনার প্রতিটি ক্লাসের একটি static loadState পদ্ধতির প্রয়োজন।

class MyProcedureModel {
  static loadState(state, workspace) {
    // Note that the procedure model should not deserialize parameters.
    // The deserializer will handle that.
    return new MyProcedureModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  static loadState(state, workspace) {
    return new MyParameterModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}
,

পদ্ধতিটি সমস্ত রেফারেন্স ব্যাকিং ডেটা মডেলকে ব্লক করে যা পদ্ধতির স্বাক্ষর (নাম, পরামিতি এবং রিটার্ন) সংজ্ঞায়িত করে। @blockly/block-shareable-procedures প্লাগইন দ্বারা প্রদত্ত ডেটা মডেলগুলি Blockly-এর লিগ্যাসি বিল্ট-ইন পদ্ধতি ব্লকের আচরণের প্রতিলিপি করার জন্য তৈরি করা হয়েছে।

এর মধ্যে এমন কিছু আচরণ রয়েছে যা আপনি আপনার কাস্টম পদ্ধতি ব্লকের জন্য নাও চাইতে পারেন, যার মধ্যে রয়েছে:

  • রিটার্ন প্রকার সমর্থিত নয়
  • সমস্ত পরামিতি একটি গ্লোবাল ভেরিয়েবলের সাথে যুক্ত

আপনি যদি ভিন্ন আচরণ চান, আপনি আপনার নিজস্ব কাস্টম পদ্ধতি ডেটা মডেল তৈরি করতে পারেন।

পদ্ধতি মডেল বাস্তবায়ন

আপনার পদ্ধতির ডেটা মডেলকে IprocedureModel ইন্টারফেস বাস্তবায়ন করতে হবে।

class MyProcedureModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;

    // Note: construction should not add the model to the procedure map.
  },

  // Other methods are omitted for brevity...
}

প্যারামিটার মডেল বাস্তবায়ন

আপনার প্যারামিটার ডেটা মডেলকে IParameterModel ইন্টারফেস বাস্তবায়ন করতে হবে।

class MyParameterModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;
  },

  setProcedureModel(model) {
    this.model =  model;
    return this;
  }

  // Other methods are omitted for brevity...
}

ট্রিগার পরিবর্তন

পদ্ধতির মডেলে পরিবর্তন আনতে পারে এমন যে কোনো পদ্ধতিতে @blockly/block-shareable-procedures প্লাগইন থেকে triggerProceduresUpdate কল করা উচিত। এটি যেকোনো পদ্ধতির ব্লকে doProcedureUpdate কল করবে, যার ফলে সেগুলি পুনরায় রেন্ডার হবে।

import {triggerProceduresUpdate} from '@blockly/block-shareable-procedures';

class MyProcedureModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

ঘটনা

@blockly/block-shareable-procedures প্লাগইন-এর পদ্ধতির মডেলগুলিও যখন পদ্ধতিগুলি পরিবর্তন করা হয় তখন ইভেন্টগুলি চালু করে। এটি একাধিক ওয়ার্কস্পেসকে সিঙ্কে রাখার অনুমতি দেয়, এবং পদ্ধতির মডেলগুলি তাদের জুড়ে ভাগ করা যায়। আপনি চাইলে ইভেন্ট ফায়ার করতেও বেছে নিতে পারেন।

ডিসিরিয়ালাইজেশন

ডিসিরিয়ালাইজেশন সমর্থন করার জন্য আপনার প্রতিটি ক্লাসের একটি static loadState পদ্ধতির প্রয়োজন।

class MyProcedureModel {
  static loadState(state, workspace) {
    // Note that the procedure model should not deserialize parameters.
    // The deserializer will handle that.
    return new MyProcedureModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  static loadState(state, workspace) {
    return new MyParameterModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}