بلوک های از پیش تعیین شده، بلوک های از پیش تعیین شده، بلوک های از پیش تعیین شده، بلوک های از پیش تعیین شده

شما می‌توانید وضعیت بلوک‌ها را در یک جعبه ابزار پیکربندی (از پیش تعیین‌شده) کنید. برای مثال، می‌توانید یک فیلد را روی یک مقدار پیش‌فرض تنظیم کنید یا دو بلوک را به هم متصل کنید. همچنین می‌توانید بلوک‌های سایه ایجاد کنید که به عنوان بلوک‌های پیش‌فرض برای بلوک‌های فرزند عمل می‌کنند.

مثال‌ها

در اینجا چند نمونه از بلوک‌های از پیش تعیین‌شده آورده شده است.

بلوک با مقدار فیلد از پیش تعیین شده

در اینجا یک بلوک math_number وجود دارد که فیلد آن به جای عدد پیش‌فرض ۰، عدد ۴۲ را نمایش می‌دهد:

یک بلوک عددی که مقدار آن از پیش روی ۴۲ تنظیم شده است.

و در اینجا جعبه ابزاری وجود دارد که این فیلد را تنظیم می‌کند:

جی‌سون

{
 "kind": "flyoutToolbox",
 "contents": [
   {
     "kind": "block",
     "type": "math_number",
     "fields": {
       "NUM": 42
     }
   },
 ]
}

XML

<xml id="toolbox" style="display: none">
 <block type="math_number">
   <field name="NUM">42</field>
 </block>
</xml>

بلوک‌های از پیش متصل

در اینجا یک بلوک controls_for وجود دارد که سه بلوک math_number به آن متصل شده‌اند:

یک بلوک «شمارش با i از مقداری به مقدار دیگر». سه ورودی مقدار به بلوک‌های عددی با مقادیر ۱، ۱۰ و ۱ متصل هستند.

و در اینجا جعبه ابزاری وجود دارد که این بلوک‌ها را از قبل به هم متصل می‌کند:

جی‌سون

{
 "kind": "flyoutToolbox",
 "contents": [
   {
     "kind": "block",
     "type": "controls_for",
     "inputs": {
       "FROM": {
         "block": {
           "type": "math_number",
           "fields": {
             "NUM": 1
           }
         }
       },
       "TO": {
         "block": {
           "type": "math_number",
           "fields": {
             "NUM": 10
           }
         }
       },
       "BY": {
         "block": {
           "type": "math_number",
           "fields": {
             "NUM": 1
           }
         }
       },
     }
   },
 ]
}

XML

<xml id="toolbox" style="display: none">
 <block type="controls_for">
   <value name="FROM">
     <block type="math_number">
       <field name="NUM">1</field>
     </block>
   </value>
   <value name="TO">
     <block type="math_number">
       <field name="NUM">10</field>
     </block>
   </value>
   <value name="BY">
     <block type="math_number">
       <field name="NUM">1</field>
     </block>
   </value>
 </block>
</xml>

بلوک‌های غیرفعال

بلوک‌های غیرفعال را نمی‌توان از جعبه ابزار کشید (drag) و جابجا کرد. بلوک‌ها را می‌توان به صورت جداگانه با استفاده از ویژگی اختیاری disabled غیرفعال کرد.

یک منوی شناور با سه بلوک. بلوک سوم غیرفعال و خاکستری رنگ است.

جی‌سون

{
 "kind": "flyoutToolbox",
 "contents": [
   {
     "kind": "block",
     "type":"math_number"
   },
   {
     "kind": "block",
     "type": "math_arithmetic"
   },
   {
     "kind": "block",
     "type": "math_single",
     "disabled": "true"
   }
 ]
}

XML

<xml id="toolbox" style="display: none">
 <block type="math_number"></block>
 <block type="math_arithmetic"></block>
 <block type="math_single" disabled="true"></block>
</xml>

همچنین می‌توانید با استفاده از setDisabledReason یک بلوک را به صورت برنامه‌نویسی شده غیرفعال یا فعال کنید.

بلوک‌های خود را پیکربندی کنید

شما می‌توانید یک بلوک را در یک جعبه ابزار به همان روشی که در یک فضای کاری پیکربندی می‌کنید، پیکربندی کنید. برای مثال، می‌توانید مقادیر فیلد را تنظیم کنید، بلوک‌ها را به ورودی‌های مقدار یا دستور متصل کنید، نظرات اضافه کنید و بلوک‌ها را جمع یا غیرفعال کنید. این امر امکان‌پذیر است زیرا جعبه ابزارها از همان کدی برای پیکربندی بلوک‌هایی استفاده می‌کنند که فضاهای کاری برای سریال‌سازی آنها استفاده می‌کنند.

همچنین به این معنی است که ایجاد پیکربندی بلوک آسان است. فقط بلوک خود را در یک فضای کاری بارگذاری کنید، آن را به شکلی که می‌خواهید پیکربندی کنید و با اجرای کد زیر در کنسول، آن را سریالایز کنید.

جی‌سون

console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));

XML

console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));

سپس می‌توانید کد پیکربندی را کپی کرده و در جعبه ابزار خود قرار دهید. حتماً ویژگی‌های x ، y و id را که توسط جعبه ابزار نادیده گرفته می‌شوند، حذف کنید.

فیلدهای متغیر

ممکن است لازم باشد فیلدهای متغیر وقتی در جعبه ابزار هستند، در مقایسه با وقتی که سریالی می‌شوند، به طور متفاوتی مشخص شوند.

به طور خاص، وقتی فیلدهای متغیر معمولاً به JSON سریالی می‌شوند، فقط حاوی شناسه متغیری هستند که نشان می‌دهند، زیرا نام و نوع متغیر به طور جداگانه سریالی می‌شوند. با این حال، جعبه ابزارها حاوی این اطلاعات نیستند، بنابراین باید مستقیماً در فیلد متغیر گنجانده شوند.

{
  "kind": "flyoutToolbox",
  "content": [
    {
      "kind": "block",
      "type": "controls_for",
      "fields": {
        "VAR": {
          "name": "index",
          "type": "Number"
        }
      }
    }
  ]
}

بلوک‌های سایه

بلوک‌های سایه، بلوک‌های نگهدارنده‌ای هستند که چندین عملکرد را انجام می‌دهند:

  • آنها مقادیر پیش‌فرض برای بلوک والد خود را نشان می‌دهند.
  • آنها به کاربران اجازه می‌دهند مقادیر را مستقیماً و بدون نیاز به واکشی یک بلوک عددی یا رشته‌ای تایپ کنند.
  • برخلاف یک بلوک معمولی، اگر کاربر بلوکی را روی آنها قرار دهد، جایگزین می‌شوند.
  • آنها کاربر را از نوع مقدار مورد انتظار مطلع می‌کنند.

برای ایجاد یک بلوک سایه، به جای ویژگی block یا برچسب <block> ، از ویژگی shadow (JSON) یا برچسب <shadow> (XML) استفاده کنید. برای مثال، در اینجا یک بلوک math_arithmetic وجود دارد که دو بلوک سایه math_number به آن متصل شده‌اند:

یک بلوک `math_arithmetic` با دو ورودی مقداری که توسط یک منوی کشویی عملگر از هم جدا شده‌اند و عملگر جمع روی آن انتخاب شده است. هر ورودی مقداری شامل یک بلوک عددی سایه‌دار است که خاکستری رنگ شده است تا نشان دهد بلوک دیگری می‌تواند جایگزین آن شود.

و در اینجا جعبه ابزاری وجود دارد که از این بلوک‌های سایه استفاده می‌کند:

جی‌سون

{
 "kind": "flyoutToolbox",
 "contents": [
   {
     "kind": "block",
     "type": "math_arithmetic",
     "fields": {
       "OP": "ADD"
     },
     "inputs": {
       "A": {
         "shadow": {
           "type": "math_number",
           "fields": {
             "NUM": 1
           }
         }
       },
       "B": {
         "shadow": {
           "type": "math_number",
           "fields": {
             "NUM": 1
           }
         }
       }
     }
   },
 ]
}

XML

<xml id="toolbox" style="display: none">
 <block type="math_arithmetic">
   <field name="OP">ADD</field>
   <value name="A">
     <shadow type="math_number">
       <field name="NUM">1</field>
     </shadow>
   </value>
   <value name="B">
     <shadow type="math_number">
       <field name="NUM">1</field>
     </shadow>
   </value>
 </block>
</xml>