Rou Jia Mo: Chinese Burgers
4
servings
Main
Course
Print Recipe
Ingredients
Directions
Flatbread Buns
2 ½ c
all-purpose flour, plus more for dusting
Jump
1 tsp
instant active dry yeast
Jump
1 c
room-temperature water
Jump
2 tbsp
high-temperature cooking oil (such as peanut, grapeseed, or sunflower oil)
Jump
Beef/Lamb Filling
1 lb
marbled cut (skirt steak, tri-tip, or flatiron steak for beef, or leg of lamb), cut into ¼-inch thick slices
Jump
1 ½ tbsp
soy sauce
Jump
2 tsp
sesame oil
Jump
1 tbsp
cornstarch
Jump
2 tsp
ground cumin
Jump
1 tsp
fennel seeds
Jump
½ tsp
ground cinnamon
Jump
¼ tsp
ground nutmeg
Jump
¼ tsp
ground cloves
Jump
¼ tsp
ground anise
Jump
2 tbsp
high-heat cooking oil (such as peanut, grapeseed, or sunflower oil)
Jump
1 sm
yellow onion, thinly sliced
Jump
1
1-inch piece ginger, peeled and grated
Jump
2
scallions, thinly sliced
Jump
2 tbsp
Chinese rice wine or dry sherry
Jump

Rou jia mo originated in Shaanxi province, in the northwest of China, but they are now a popular street food across the country. The heavy use of cumin and other spices is common in the food culture of the province, which sits along the Northern Silk Road and has a sizable Muslim population. I recommend a fattier cut of lamb or beef for stir-frying; outside of Shaanxi province, pork belly is common, but it requires braising for a longer period of time. The flatbread buns, baijimo, are traditionally cooked in a clay oven, but you can make them rise just using a skillet on your stovetop. Don’t skimp on the rising time, or the baijimo will end up flatter. When you get this as a street snack, the meat is usually hot, but there’s no guarantee the buns will be warm; when you make this at home, the warm buns fresh off the skillet make eating the rou jia mo a sublime experience.

Directions

  1. In a stand mixer or large bowl, combine the flour and yeast. Slowly add the water and mix (on low setting if using a mixer) for 5-6 minutes, until a smooth dough has formed. Transfer the dough to a bowl and cover the top of the bowl loosely with a slightly damp towel to prevent the dough from drying out. Allow the dough to rest for 20-30 minutes, until it has increased in size slightly and has a lighter and airier feel.
  2. Flour your work surface again and roll out the rested dough. Divide the dough into balls about 2 inches in diameter. Dust your rolling pin with flour and roll out each segment into circles about 5.5-6 inches in diameter. Roll up each circle into a cylinder, then coil the dough so that it resembles a snail. Turn the dough to the side so that the coil part faces up. Lightly press down on the dough with the palm of your hand to make it easier to roll out with the rolling pin. Then, using the rolling pin, flatten again into slightly smaller disks, about 4-4.5 inches in diameter and 1/3 inch thick.
  3. Place the rolled-out pancakes on a plate and repeat with the remaining dough. Allow the disks to sit for another 10-15 minutes before pan-frying. (Whatever you don't cook immediately can be frozen for future use.)
  4. Heat a nonstick, flat-bottom skillet or cast iron skillet over medium-high heat. Lightly brush both sides of the disks with oil. Working in batches, pan-fry the disk on the first side for 4 minutes, until lightly golden and puffed up. If the disks are browning too fast, reduce the heat to medium or medium-low. Flip over disks with tongs and pan-fry the other side until lightly golden and even more puffed, 3½-4 minutes.
  5. Transfer to a sheet pan or plates to cool, then slice the buns open horizontally with a serrated knife to form buns.
  6. Marinate the lamb or beef: In a medium bowl, combine the meat with the soy sauce, sesame oil, and cornstarch. Stir until the cornstarch is dissolved. Add the cumin, fennel, cinnamon, nutmeg, cloves, and anise, and mix well. Allow the meat to marinate at room temperature for 10 minutes.
  7. Heat the cooking oil in a wok or large skillet over medium-high heat. Add the meat and stir-fry for about 2 minutes, until no longer pink on the outside. Transfer to a plate and set aside.
  8. Add the onions and ginger, and cook until the onions are softened and translucent, 4-5 minutes. Return the meat to the skillet and cook for another 1-2 minutes, then turn off the heat. Stir in the chopped scallions. Use a fork to stuff the buns with the filling. Serve hot.

Diana Kuan

Diana Kuan is a food writer and photographer based in Brooklyn. She is the author of Red Hot Kitchen, on cooking with Asian hot sauces, and The Chinese Takeout Cookbook, on Chinese food and culture in America. Her work has also appeared in Food & Wine, Time Out New York, and The Boston Globe, among other publications. In addition to writing and photography, Diana has taught cooking classes for the past 10 years in both Beijing and New York. Her favorite foods are dumplings, ramen, and tacos, usually with hot sauce on the side.

[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://www.tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>
[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://www.tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>